关键字 | 说明 |
|---|---|
H:Create[组件名][self:组件id] | 组件创建 |
H:ViewPU.viewPropertyHasChanged 组件名 状态变量名 N | 某个组件状态变量发生更新,N表示该状态变量更新后影响的组件数量。需要在应用启动前运行hdc shell param set persist.ace.debug.enabled 1命令才可以看到该Trace关键字 |
H:ABILITY_OR_PAGE_SWITCH | 页面切换过程 |
H:MarshRSTransactionData | 应用提交渲染数据给render_service |
运行hdc shell param set persist.ace.debug.enabled 1命令、重启应用,使用ArkUI Inspector抓取问题场景下的页面布局,确认当前页面是什么页面,然后进一步分析。
排查文本组件创建前Trace信息,有发现状态变量更新,推测该状态变量包含文本组件构建时传入的文本内容参数。

在代码中检索状态变量ChildItem,确认该变量为Text文本组件的文本内容参数,同时在进入该应用页面时延迟3秒才更新该状态变量(参考以下代码为例),文本内容参数设置较慢,导致文本加载慢的问题。
aboutToAppear(): void {
setTimeout(() => {
let item = undefined;
// 业务逻辑处理,修改item值
this.ChildItem = item;
}, 3000);
}
build() {
Column() {
List() {
ForEach(this.ChildItem, (item: string) => {
Column(){
Text(item)
// 其他子组件
}
})
}
.width('100%')
.height('100%')
}
.height('100%')
.width('100%')
} 找到组件创建后首次提交渲染数据的Trace点H:MarshRSTransactionData,可看到在页面切换完成之后,组件创建到开始渲染的时间间隔为680ms。

分析该过程Trace信息,耗时主要集中在Image组件创建,组件创建时下载网络图片,可知应用设置了同步加载图片(syncLoad为true)。

网络图片下载耗时,同步加载会等待图片下载完成,导致Image组件创建耗时多,影响到Text组件渲染绘制,引起加载慢问题。
如果未看到有明显耗时较多的网络请求,如下图例中页面加载时按钮加载较慢问题,可排查按钮显示之前网页侧代码是否存在计时器触发,即延时任务。如存在计时器触发,则可以通过点击调用树中函数调用右侧链接跳转到网页侧代码,确认是否有延时操作。

如下示例代码可看到网页在加载完成1秒后才显示按钮。
function completeLoading() {
if (document.readyState == "complete") {
window.setTimeout(() => {
// ...
document.getElementById('button_id').style.display = 'block'
}, 1000)
}
}