Skip to main content

页面性能监控

背景

在 iOS 应用中,页面加载耗时是一个重要的性能指标。如果某个页面的启动耗时过长,可能会导致用户体验下降,甚至影响应用的整体性能。页面性能监控主要指监控页面的加载耗时,Bugly 的页面加载耗时功能默认会监控 UIViewController 加载耗时,耗时信息也分为两类:页面渲染耗时页面加载耗时

  • 页面渲染耗时:从 UIViewController 的 loadView: 调用到 viewDidAppear: 调用的时间;
  • 页面加载耗时:其值默认与页面渲染耗时相同,但用户可以通过 endVC Render: 接口来自定义 VC 的加载结束时间;

开启方式

页面加载耗时分析是新增功能,Bugly SDK 需要升级到 2.8.0 之后的版本才支持,与 Bugly 其他功能一样,需要在客户端先执行如下代码开启,同时在 Bugly 后台配置合适的采样率:

  1. 需要在启动模块中包含 BUGLY_MODUEL_PAGE_LAUNCH 或使用 RM_MODULE_ALL;
[Bugly start:@[BUGLY_MODUEL_PAGE_LAUNCH, /*...*/] config:config completeHandler:^{/*...*/}];
// 或
[Bugly start:RM_MODULE_ALL config:config completeHandler:^{/*...*/}];
  1. 需要在 SDK 功能配置中开启配置项;

sample_ratio: 控制用户采样率,即多少设备会开启这个功能,1 代表所有设备开启, 0 代表所有设备都不开.

页面监控配置

  1. 成功开启后,会在 SDK 启动时,输出的模块开启日志中包含对应的模块名称:
[Bugly][Event][BuglyDAUReporter.m:100][SDK setup] Activate Module:(
"launch.page_launch"
...
)
  1. 同理,上报日志中,包含如下信息:
[Bugly][Event][RMReportQueue.m:601][Report] [launch.page_launch] report id:xxx error:(null)

接口说明

除了监控页面的渲染和加载耗时外,用户还可以通过调用以下接口,监控页面启动过程中各个span的耗时,所谓span可以理解为页面启动过程中各个子阶段.

以下为BuglyPageLoadMonitor 的定义;

@interface BuglyPageLoadMonitor : NSObject

/**
* 标识当前 VC 渲染完成
* 若始终未调用此方法,则使用 viewDidAppear 为结束时间
* @param vc 对应 VC 对象
*/
+ (void)endVCRender:(UIViewController *)vc;

/**
* 添加一组 spans 为当前 vc
* @param spans 添加的 spans
* @param vc 对应 VC 对象
*/
+ (void)addSpans:(NSArray<RMSpan *> *)spans forVC:(UIViewController *)vc;

@end

其中 RMSpan 的定义与启动监控中的 span 一致,详情参考 RMSpan.h 中定义即可。同一个 VC 的相同名字的 span 只会保存最后一条,也就是后面会覆盖前面相同名字span的耗时数据。

功能使用说明

页面打开耗时的页面主要分为 ”指标概览“ 和 ”span耗时“ 这两部分,在指标概览部分,我们可以了解到如下的指标信息,而且每个指标都有对应的上报趋势数据展示。

  • 页面渲染耗时的平均值和分位值;
  • 页面加载耗时的平均值和分位值;
  • 秒开率:页面渲染耗时小于1秒的占比;
  • 慢开率:页面渲染耗时大于3秒的占比;
  • 跳出率:页面启动过程中没等渲染完就退出页面的占比 (可以用来统计打开页面后一直白屏,然后用户就选择退出页面的概率);

指标概览

另外我们也提供很多的筛选项,例如只想看 xxUIViewController 页面的指标数据,可以直接在筛选框过滤 xxUIViewController 特定页面的数据:

按照页面名称筛选不同页面

span耗时 这一部分,如页面的整体耗时指标一样,我们也可以清楚的了解每个span的平均值和各个分位值信息,同时也支持多种筛选项:

span详情