针对应用性能对用户体验的问题分析,应用性能监控全链路版提供了启动分析和页面体验两种场景。通常来说,应用启动过程的体验问题以及访问页面时的耗时会对企业的收入和口碑有至关重要的影响。
启动分析监控不同启动类型的耗时情况,通过启动相关指标的趋势图、分布图可了解应用启动过程中的耗时数据。
您可以通过以下筛选条件进行数据筛选。
启动类型 | 定义 | Android计算方式 | iOS数据口径 |
---|---|---|---|
首次启动 | App安装后的第一次冷启动,包含版本升级、删除重装。 | Activity的onResume() - Application构造函数 | 从进程创建到首个UIViewController.didAppear方法调用 |
冷启动 | App进程从无到有的启动过程 | Activity的onResume() - Application构造函数 | 从进程创建到首个UIViewController.didAppear方法调用 |
温启动 | App进程存活,再次触发启动的过程(back退出再次进入) | Activity的onResume() - Activity的onCreate() | 不涉及 |
热启动 | App进程存活,再次触发启动的过程(后台切换到前台) | Activity的onResume() - Activity的onRestart() | 从willEnterForeground到didBecomeActive |
iOS 15以上的系统中存在Prewarm策略,使得应用的一部分启动流程提前,导致平台统计到的启动时间偏大。
对于这种情况,平台采取方案:如果触发了Prewarm,那么平台统计到的启动时长会进行校准,即忽略一部分启动时间,因此统计到的启动时间会略小于真实时间,且上报的启动Trace可能会缺少execToLoad或者loadToDidFinishLaunching时间。
如果您希望获取更加精准的启动时间,请把SDK升级到2.11.1或更高版本,并执行以下操作:
[RangersAPM prewarmCheckStart]
,同时在application:willFinishLaunchingWithOptions:
方法中调用[RangersAPM prewarmCheckEnd]
。application:willFinishLaunchingWithOptions:
方法中包含复杂逻辑,则不建议此操作。application:didFinishLaunchingWithOptions:
最开始初始化SDK。[RangersAPM applicationDidFinishLaunching]
。启动时间和次数页面可以查看筛选条件下启动平均时间和启动次数的趋势图。
启动时间分布页面可以查看筛选条件下启动时间的分布情况。
性能分解中提供了启动阶段各指标的趋势图,以了解具体影响启动耗时的原因。
监控端 | 说明 |
---|---|
Android端 |
|
iOS端 |
|
分位值是通过对大量数据进行统计分析得到的。按照启动时间排序取分位值,查看该时间点的启动时间最高值和最低值的占比。
说明
启动首次加载页面:支持在右上角切换启动首页,满足App的多个启动首页的场景。
关键节点说明:
系统 | 节点 | 说明 |
---|---|---|
Android | totalTime | 启动总耗时。是首次执行onResume的activity,更多信息请参见启动类型。 |
app_constructor | Application构造函数耗时 | |
app_attachBaseContext | Application attachBaseContext()方法耗时 | |
app_onCreate | Application onCreate()方法耗时 | |
initData | 启动自定义打点initData阶段耗时 | |
activity_onCreate | Activity onCreate()方法耗时 | |
activity_onStart | Activity onStart()方法耗时 | |
activity_onResume | Activity onResume()方法耗时 | |
activity_onRestart | Activity onRestart ()方法耗时 | |
iOS | totalTime | 启动总耗时 |
from_exec_to_load | 从进程开始函数exec开始到指定+load执行的阶段 | |
from_load_to_didFinishLaunching | 从指定+load执行开始到didFinishLaunching函数执行开始的阶段 | |
from_didFinishLaunching_to_first_render_time | 从didFinishLaunching函数执行开始到首次渲染完成(CoreAnimation首次commit完成)的阶段 | |
from_vc_loadView_to_didAppear | 从FirstVC.loadView()到FirstVC.viewDidAppear()结束的阶段 |
耗时详情:单击可以查看该节点的指标趋势图和分位值趋势图。
慢启动分析展示慢启动趋势、慢启动分布和慢启动详情。其中,慢启动趋势中展示了慢启动占比、慢启动次数、正常冷启动次数的趋势图。
详细信息中记录了该异常下慢启动各指标和详细的慢启动发生时详细的参数取值。
指标说明:
指标 | Android说明 | iOS说明 |
---|---|---|
pre-初始化耗时 | Android无意义,为0 | 从进程开始函数exec开始到指定+load执行的阶段 |
初始化耗时 | Application.attachbaseContext()方法耗时 | 从指定+load执行开始到didFinishLaunching函数执行开始的阶段 |
应用构建耗时 | Application.attachbaseContext()结束到Application.onCreate()结束 | 从didFinishLaunching函数执行开始到首次渲染完成(CoreAnimation首次commit完成)的阶段 |
页面加载耗时 | Application.onCreate()结束到MainActivity.onResume()结束 | 从FirstVC.loadView()到FirstVC.viewDidAppear()结束的阶段 |
慢启动节点耗时展示了该异常下各Task的耗时。
启动崩溃统计通过查看崩溃趋势、崩溃分布和崩溃列表来统计启动阶段发生的崩溃问题。其中,启动阶段定义为在应用启动8s内为启动阶段。通过查询该模块页面的崩溃情况,并查询对应的issue,通过堆栈等信息做定位分析。
注意
Native页面体验中提供了页面响应、流畅性和丢帧、异常统计和追踪三个页面的看板能力。
在页面体验中,通过页面响应耗时、页面卡顿情况、卡顿崩溃的分析来了解整个应用的页面体验指标以及定位异常。
您可以通过以下筛选条件进行数据筛选。
页面响应提供了各页面指标列表。
指标说明:
指标 | 说明 |
---|---|
触发次数 | 筛选条件下该页面被触发的次数 |
失败占比 | 筛选条件下失败页面次数/筛选条件下页面打开次数
|
可用占比 | 1-失败占比 |
崩溃占比 | 筛选条件下发生崩溃的页面次数/筛选条件下页面打开次数 |
流畅占比 | 筛选条件下页面打开耗时未达到设定阈值的页面次数/筛选条件下页面打开次数 |
慢页面占比 | 1-流畅占比 |
单击页面名称,进入页面详情查看该页面的加载时间及次数、加载时间分布、分位值、页面加载时序图。
页面详情可以查看该页面加载次数、加载耗时、加载时间分布图、上线后各时间点被用户访问的次数统计。
页面加载时序图中,可定位影响页面加载耗时的关键Task,找到后可精准优化。
流畅性和丢帧提供了双端FPS的指标趋势图、分布图,以及各页面指标列表。
FPS分位值趋势图中展示了FPS 1%、5%、25%、50%、75%、95%、99%分位值以及平均值的分布趋势。
FPS流畅度分布图中展示了FPS_FAST占比、FPS_NORMAL占比、FPS_BAD占比以及FPS_BAD增长率。
参数说明:
详细信息列表中展示了页面样本量、FPS平均值、掉帧归因、掉帧评分等信息。
页面的异常提供了慢页面分析、卡顿页面分析、崩溃页面分析这三种异常场景的数据查询与异常归因的能力,查询该模块页面的慢访问次数与分布。