页面加载相关Trace关键字如下:
关键字 | 说明 |
|---|---|
H:DispatchTouchEvent 位置 type=1 | 应用收到点击离手的事件 |
H:ABILITY_OR_PAGE_SWITCH | 页面切换过程 |
H:HttpRequestInner | http请求 |
H:CustomNode:BuildItem[组件名][self:组件ID][parent:父组件ID] | 构建自定义组件 |
H:CustomNodeBase:Destroy[组件名] | 自定义组件销毁 |
H:CreateTaskMeasure[组件名][self:组件ID][parent:父组件ID] | 创建组件的测量任务,确定组件的宽高 |
dns:域名解析耗时,单位:ms。
connect:TCP握手耗时,单位:ms。
TLS:TLS握手(加密鉴权)耗时,单位:ms。
firstSend:从加密鉴权结束到传输即将开始的耗时,单位:ms。
firstRecv:从传输开始到第一个字节被接收的耗时,单位:ms。
total:总耗时,单位:ms。
分析问题时首先确认total值在问题反馈的总耗时占比是否较多,如总耗时达到秒级,对用户体验就会有较大影响,然后看耗时主要集中在dns、connect、TLS、firstSend、firstRecv哪一部分,size值是否过大(比如图片正常资源大小为KB,几MB的图片下载耗时较多)。
以打开某新闻类应用的新闻信息过程中,显示加载时间长问题为例,定位过程如下:
首先搜索创建Loading组件的Trace关键字H:CustomNode:BuildItem[Loading],可看到应用在收到手指离开屏幕的事件中加载了DetailPage详情页面,之后创建了Loading组件显示。

然后搜索销毁Loading组件的Trace关键字H:CustomNodeBase:Destroy[Loading],最终划定的分析范围如下图所示。可看到应用在加载详情页面时,会触发页面跳转动画,然后发起http请求从云侧获取详情页的相关数据,最后将详情页面内容刷新显示出来,移除加载页,整体耗时1.0s。

或者搜索Loading组件完成加载的Trace关键字H:ViewPU.viewPropertyHasChanged Loading loadingComplete 1。划定的分析范围如下图所示。可看到应用在创建组件后会发起http请求从云侧获取详情页的相关数据,请求完成后loadingComplete状态值改变为1,整体耗时16.3s。

07-08 20:44:39.812 34907-35118 C015B0/应用包名/NETSTACK 应用包名 I [Http_exec.cpp:418] taskid=-2147483634, size:183, dns:0.170, connect:0.000, tls:0.000, firstSend:0.533, firstRecv:315.032, total:702.878, redirect:0.000, errCode:0, RespCode:200, HttpVer:3, method:GET, osErr:0
通过ArkUI Inspector查看发现是推荐阅读列表,数了下该列表一共有80个ImageItem。ImageItem是应用的自定义组件,用于显示一则新闻的概要信息,该组件个数较多导致应用页面测量确认组件宽高耗时较多。
