场景导入
响应时延是指,应用内手指点击离开屏幕或出现移动开始,到页面发生变化的时间。常见的场景包括点击后弹出弹窗或者loading动画,滑动后页面移动等场景。
性能指标
标准价值和影响:
指标分级:
当前测试标准包含 15ms 硬件处理补偿,如标准为 80ms,则trace耗时最长可为 65ms = 80 - 15。
性能衡量起始点介绍
点击操作响应时延的性能衡量的起点,为用户点击应用元素离手帧时间,终点为应用界面发生变化的时间。
滑动操作响应时延的性能衡量的起点,为用户开始滑动时间,终点为应用界面发生变化的首帧。
Trace 解读
Trace 抓取。
Chrome DevTools抓取。
Web组件支持使用DevTools工具调试前端页面,参考文档:使用Devtools工具调试前端页面。
打开调试开关。
hdc shell param set web.debug.devtools true
2. 查找devtools远程调试所需的domain socket名称,该名称与进程号有关,重启调试应用后,需要重复此步骤,以完成端口转发。
```
hdc shell "cat /proc/net/unix | grep devtools"
// 显示 @webview_devtools_remote_14876
```
3. 配置端口映射, 添加映射\[pid\]替换成实际的进程id。
```
hdc fport tcp:9222 localabstract:webview_devtools_remote_[pid]
// hdc fport tcp:9222 localabstract:webview_devtools_remote_14876
```
4. 查看映射。
```
hdc fport ls
```
5. 验证端口转发是否成功。
在电脑端Chrome浏览器地址栏中输入chrome://inspect/\#devices,页面识别到设备后,就可以开始页面调试。
调试效果如下:
![](/img/bVdhmZn)
6. 点击inspect 进入调试页面。
![](/img/bVdhmZo)
7. 点击录制按钮进入录制。
![](/img/bVdhmZp)
8. 点击停止按钮结束录制。
可以先从全局初筛分析范围,然后按选中范围进行细筛。
常见泳道介绍:
<a name="table636542818165"></a>
<table><thead align="left"><tr id="row1636572831610"><th class="cellrowborder" valign="top" width="50%" id="mcps1.1.3.1.1"><p id="p15365132821612"><a name="p15365132821612"></a><a name="p15365132821612"></a>泳道名称</p>
</th>
<th class="cellrowborder" valign="top" width="50%" id="mcps1.1.3.1.2"><p id="p3365192861614"><a name="p3365192861614"></a><a name="p3365192861614"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row136562812164"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p12366112812162"><a name="p12366112812162"></a><a name="p12366112812162"></a>网络</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p1436616283162"><a name="p1436616283162"></a><a name="p1436616283162"></a>网络请求,显示资源或数据请求</p>
</td>
</tr>
<tr id="row15366328101614"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p173661928191616"><a name="p173661928191616"></a><a name="p173661928191616"></a>帧</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p836652819161"><a name="p836652819161"></a><a name="p836652819161"></a>页面送帧,可以查看对比页面变化</p>
</td>
</tr>
<tr id="row1036622817167"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p7366152811613"><a name="p7366152811613"></a><a name="p7366152811613"></a>动画</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p17366928131617"><a name="p17366928131617"></a><a name="p17366928131617"></a>页面中加载的动画效果时间条</p>
</td>
</tr>
<tr id="row193661928171611"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p3366328121611"><a name="p3366328121611"></a><a name="p3366328121611"></a>互动</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p1936614289166"><a name="p1936614289166"></a><a name="p1936614289166"></a>操作事件,可视化展示点击或滑动操作</p>
</td>
</tr>
<tr id="row15366192811617"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p83661728111617"><a name="p83661728111617"></a><a name="p83661728111617"></a>主要</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p163661128191611"><a name="p163661128191611"></a><a name="p163661128191611"></a>网页排版、解析、JavaScript执行等</p>
</td>
</tr>
<tr id="row1836615288165"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p4366132818164"><a name="p4366132818164"></a><a name="p4366132818164"></a>线程池</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p5366182841614"><a name="p5366182841614"></a><a name="p5366182841614"></a>系统或应用异步操作处理,一般不关注</p>
</td>
</tr>
<tr id="row9366172811168"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p183665282165"><a name="p183665282165"></a><a name="p183665282165"></a>Compositor</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p5366172811610"><a name="p5366172811610"></a><a name="p5366172811610"></a>合成线程,对栅格化数据进行合成处理。 一般不关注</p>
</td>
</tr>
<tr id="row1436622891619"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p10366192815164"><a name="p10366192815164"></a><a name="p10366192815164"></a>Chrome_ChildIOThread</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p103661828131613"><a name="p103661828131613"></a><a name="p103661828131613"></a>处理文件操作, 一般不关注</p>
</td>
</tr>
</tbody>
</table>
2. DevEco Studio Trace抓取。
DevTools Trace细节丰富,但是不易导出共享。 DevEco Studio Trace 共享能力较好,参考文档:[DevEco Profiler工具简介](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-profiler-V5)。
1. 进入Profiler 窗口,选中应用进程,点击Frame图标开启会话,点击录制按钮开始录制。
![](/img/bVdhmZq)
2. 点击停止按钮结束录制。
![](/img/bVdhmZr)
3. 录制结果。
![](/img/bVdhmZs)
常用泳道介绍:
<a name="table44789129328"></a>
<table><thead align="left"><tr id="row18478131217328"><th class="cellrowborder" valign="top" width="50%" id="mcps1.1.3.1.1"><p id="p24782123328"><a name="p24782123328"></a><a name="p24782123328"></a>泳道名称</p>
</th>
<th class="cellrowborder" valign="top" width="50%" id="mcps1.1.3.1.2"><p id="p547841293218"><a name="p547841293218"></a><a name="p547841293218"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="row64788125322"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p54781127322"><a name="p54781127322"></a><a name="p54781127322"></a>mmi_service</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p14478612103220"><a name="p14478612103220"></a><a name="p14478612103220"></a>多模输入信号,可以查看手势信号类型及触点</p>
</td>
</tr>
<tr id="row10478141213216"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p44781212203210"><a name="p44781212203210"></a><a name="p44781212203210"></a>应用主线程泳道</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p6479161220323"><a name="p6479161220323"></a><a name="p6479161220323"></a>应用主逻辑,接收多模信号,生成帧,分发子信号等</p>
</td>
</tr>
<tr id="row10479112103212"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p134793121321"><a name="p134793121321"></a><a name="p134793121321"></a>VizCompositorTh</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p16479191218322"><a name="p16479191218322"></a><a name="p16479191218322"></a>绘制信号监听线程,触发系统Web相关绘制或者执行</p>
</td>
</tr>
<tr id="row104791112193216"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p247951214324"><a name="p247951214324"></a><a name="p247951214324"></a>Compositor</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p10479121215322"><a name="p10479121215322"></a><a name="p10479121215322"></a>合成线程,对栅格化数据进行合成处理</p>
</td>
</tr>
<tr id="row3479212163214"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="p13479101263217"><a name="p13479101263217"></a><a name="p13479101263217"></a>CompositorGpuTh</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="p12479141263219"><a name="p12479141263219"></a><a name="p12479141263219"></a>GPU光栅化处理,生成信号送图形子系统执行渲染</p>
</td>
</tr>
</tbody>
</table>
Trace点确认。
点击操作响应时延。
DevTools Trace:
以 pointerup 事件为起点,以页面明显变化帧(链接变色,图标变色等不计算)为结束点。
DevEco Trace
滑动操作响应时延。
DevTools Trace
以touchMove事件为起点,以页面发生滑动帧为终点。
DevEco Trace
常见问题
应用加载资源后响应。
问题描述:点击操作响应时延超标。
Trace特点:
点击和响应之间存在明显网络请求过程和JS执行处理。
优化方案:
建议应用缓存页面资源或者添加转场操作。
应用执行JS后响应。
问题描述:点击操作响应时延超标。
Trace特点:
点击和响应之间存在明显JS执行处理。
优化方案:
建议应用优化执行逻辑或者添加转场或动画。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。