You need to enable JavaScript to run this app.
导航
用户体验
最近更新时间:2024.11.28 11:25:53首次发布时间:2021.07.02 16:48:13

针对应用性能对用户体验的问题分析,应用性能监控全链路版提供了启动分析和页面体验两种场景。通常来说,应用启动过程的体验问题以及访问页面时的耗时会对企业的收入和口碑有至关重要的影响。

前提条件

启动分析

启动分析监控不同启动类型的耗时情况,通过启动相关指标的趋势图、分布图可了解应用启动过程中的耗时数据。

筛选条件

您可以通过以下筛选条件进行数据筛选。

  • Android系统支持的筛选维度:
    时间、设备ID、User ID、启动类型、系统版本、APP版本、APP小版本号、机型、APM SDK版本、下载渠道、自定义维度。
  • iOS系统支持的筛选维度:
    时间、设备ID、User ID、Prewarm启动、启动类型、越狱状态、系统版本、APP版本、APP小版本号、机型、APM SDK版本、下载渠道、自定义维度。

启动类型

启动类型

定义

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 Prewarm

iOS 15以上的系统中存在Prewarm策略,使得应用的一部分启动流程提前,导致平台统计到的启动时间偏大。
对于这种情况,平台采取方案:如果触发了Prewarm,那么平台统计到的启动时长会进行校准,即忽略一部分启动时间,因此统计到的启动时间会略小于真实时间,且上报的启动Trace可能会缺少execToLoad或者loadToDidFinishLaunching时间。
如果您希望获取更加精准的启动时间,请把SDK升级到2.11.1或更高版本,并执行以下操作:

  1. 在main方法中调用[RangersAPM prewarmCheckStart],同时在application:willFinishLaunchingWithOptions:方法中调用[RangersAPM prewarmCheckEnd]
    如果您的main方法或者application:willFinishLaunchingWithOptions:方法中包含复杂逻辑,则不建议此操作。
  2. application:didFinishLaunchingWithOptions:最开始初始化SDK。
    如果由于特殊原因无法太早初始化,请首先调用[RangersAPM applicationDidFinishLaunching]

启动情况概览

启动时间和次数

启动时间和次数页面可以查看筛选条件下启动平均时间和启动次数的趋势图。
Image

启动时间分布

启动时间分布页面可以查看筛选条件下启动时间的分布情况。
Image

性能分解

Image
性能分解中提供了启动阶段各指标的趋势图,以了解具体影响启动耗时的原因。

监控端

说明

Android端

  • init_time_avg:Application.attachbaseContext()方法耗时
  • build_avg:Application.attachbaseContext()结束到Application.onCreate()结束
  • load_avg:Application.onCreate()结束到MainActivity.onResume()结束

iOS端

  • 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()结束的阶段

分位值

Image
分位值是通过对大量数据进行统计分析得到的。按照启动时间排序取分位值,查看该时间点的启动时间最高值和最低值的占比。

说明

  • 开始时间:Application的构造函数
  • 结束时间:第一个onResume方法的执行点
  • Activity首页:第一个执行onResume方法的Activity
  • 99%分位值、95%分位值、75%分位值、50%分位值都较近:启动时间长的情况普遍存在
  • 99%分位值、95%分位值较近,75%分位值、50%分位值较远:启动时间长短都有,分布较均匀

启动节点耗时

Image

  • 启动首次加载页面:支持在右上角切换启动首页,满足App的多个启动首页的场景。

  • 关键节点说明:

    系统

    节点

    说明

    Android

    totalTime

    启动总耗时。是首次执行onResume的activity,更多信息请参见启动类型
    首页的启动分位数是启动总耗时total time。

    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()结束的阶段

  • 耗时详情:单击可以查看该节点的指标趋势图和分位值趋势图。

异常统计和追踪

慢启动分析

慢启动分析展示慢启动趋势、慢启动分布和慢启动详情。其中,慢启动趋势中展示了慢启动占比、慢启动次数、正常冷启动次数的趋势图。
Image

慢启动详情

详细信息

详细信息中记录了该异常下慢启动各指标和详细的慢启动发生时详细的参数取值。
Image
指标说明:

指标

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的耗时。
Image

启动崩溃统计

启动崩溃统计通过查看崩溃趋势、崩溃分布和崩溃列表来统计启动阶段发生的崩溃问题。其中,启动阶段定义为在应用启动8s内为启动阶段。通过查询该模块页面的崩溃情况,并查询对应的issue,通过堆栈等信息做定位分析。

  • 崩溃趋势展示了启动崩溃指标和趋势图。
  • 崩溃分布通过多维分析了解慢启动分布情况便于排查问题。
  • 异常崩溃列表记录了发生启动异常的issue。

Native页面体验

注意

Native页面体验中提供了页面响应、流畅性和丢帧、异常统计和追踪三个页面的看板能力。

在页面体验中,通过页面响应耗时、页面卡顿情况、卡顿崩溃的分析来了解整个应用的页面体验指标以及定位异常。

筛选条件

您可以通过以下筛选条件进行数据筛选。

  • Android系统支持的筛选维度:
    时间、设备ID、User ID、页面、系统版本、APP版本、APP小版本号、机型、APM SDK版本、下载渠道、自定义维度。
  • iOS系统支持的筛选维度:
    时间、设备ID、User ID、越狱状态、页面、系统版本、APP版本、APP小版本号、机型、APM SDK版本、下载渠道、自定义维度。

页面响应

页面响应提供了各页面指标列表。
Image
指标说明:

指标

说明

触发次数

筛选条件下该页面被触发的次数

失败占比

筛选条件下失败页面次数/筛选条件下页面打开次数

  • 对iOS来说,页面执行了viewWillAppear:方法,但没有执行viewDidAppear:方法为失败
  • 对Android来说,页面的onCreate开始为起点,定义没走到onResume结束为失败

可用占比

1-失败占比

崩溃占比

筛选条件下发生崩溃的页面次数/筛选条件下页面打开次数

流畅占比

筛选条件下页面打开耗时未达到设定阈值的页面次数/筛选条件下页面打开次数

慢页面占比

1-流畅占比

单击页面名称,进入页面详情查看该页面的加载时间及次数、加载时间分布、分位值、页面加载时序图。

页面详情

页面详情可以查看该页面加载次数、加载耗时、加载时间分布图、上线后各时间点被用户访问的次数统计。

加载时间及次数

Image

加载时间分布

Image

分位值

Image

页面加载时序图

页面加载时序图中,可定位影响页面加载耗时的关键Task,找到后可精准优化。
Image

流畅性和丢帧

流畅性和丢帧提供了双端FPS的指标趋势图、分布图,以及各页面指标列表。

FPS分位值趋势图

FPS分位值趋势图中展示了FPS 1%、5%、25%、50%、75%、95%、99%分位值以及平均值的分布趋势。
Image

FPS流畅度分布

FPS流畅度分布图中展示了FPS_FAST占比、FPS_NORMAL占比、FPS_BAD占比以及FPS_BAD增长率。
Image
参数说明:

  • FPS_FAST:50以上
  • FPS_NORMAL:40~50
  • FPS_BAD:0~40

详细信息

详细信息列表中展示了页面样本量、FPS平均值、掉帧归因、掉帧评分等信息。
Image

  • 掉帧归因:单击进入详情页面,例如归因是卡顿,那么单击进入卡顿趋势。
  • FPS详情:单击进入FPS详情页面,查看FPS分位值趋势图、FPS流畅度分布、样本量分布、APP版本排行、机型版本排行。
  • 丢帧详情:单击进入丢帧详情页面,查看严重丢帧率、丢帧趋势、丢帧分布、样本量分布。

异常统计和追踪

页面的异常提供了慢页面分析、卡顿页面分析、崩溃页面分析这三种异常场景的数据查询与异常归因的能力,查询该模块页面的慢访问次数与分布。

  • 慢页面分析:慢页面趋势图、慢页面分布、慢页面列表
  • 卡顿页面分析:卡顿趋势、卡顿分布、卡顿列表
  • 崩溃页面分析:崩溃趋势、崩溃分布、异常崩溃列表