HarmonyOS(57) UI性能优化

性能优化是APP开发绕不过的话题,那么在HarmonyOS开发过程中怎么进行性能优化呢?今天就来总结下相关知识点。

UI性能优化

1、避免在组件的生命周期内执行高耗时操作

HarmonyOS自定义组件的生命周期如下图:

如上图所示,自定义组件在build函数执行之前,将先执行aboutToAppear()生命周期回调函数。此时若在该函数中执行耗时操作,将阻塞UI渲染,增加UI主线程负担。因此,应尽量避免在自定义组件的生命周期内执行高耗时操作,在aboutToAppear()生命周期函数内建议只做当前组件的初始化逻辑。

解决思路:对于复杂计算的耗时场景,可以将计算结果进行缓存处理。对于不需要等待结果的高耗时任务,可以采用多线程处理该任务,通过并发的方式避免主线程阻塞。

2、合理使用ResourceManager

在生命周期aboutToAppear中应该避免使用ResourceManager的getXXXSync接口入参中直接使用资源信息,推荐使用资源id作为入参,推荐用法为:resourceManager.getStringSync($r('app.string.test').id)。

java 复制代码
aboutToAppear(): void {
    //反例
    getContext().resourceManager.getStringSync($r('app.string.app_name'));
    //推荐用法
     getContext().resourceManager.getStringSync($r('app.string.app_name').id);
  }

3、优先使用@Builder方法代替自定义组件

如下图,在build阶段将在后端FrameNode树创建一个相应的CustomNode节点,在渲染阶段时也会创建对应的RenderNode节点,如下图所示

  • 前端UI描述结构会在后端创建相应的FrameNode节点树;每个树节点和前端UI组件是一一对应的关系
  • FrameNode节点树主要用于处理UI组件属性更新、布局测算、事件处理等业务逻辑;
  • CustomNode作为FrameNode的子类,用于处理自定义组件相关业务逻辑,比如执行build函数。
  • FrameNode节点树在渲染阶段生成后端渲染树进行UI渲染。

所以当在页面上大量使用自定义组件时,会成倍增加FrameNode节点树上CustomNode类型的节点数量,增加页面创建和渲染时长。因此,在满足业务需求的前提下,可以优先使用@builder函数代替自定义组件。

4、参考资料

UI组件性能优化

相关推荐
xy345330 分钟前
Axure 9.0 垂直菜单介绍
ui·产品经理·axure·原型设计
贾伟康1 小时前
HarmonyOS API 26 Navigation 自适应模式:mode、分栏切换与窗口断点治理
harmonyos·arkts·arkui·navigation·自适应布局
贾伟康1 小时前
【转盘决定吧|07】HarmonyOS ArkTS 6.0.2.130 趣味题库:场景分类、随机选择与详情页解耦
harmonyos·arkts·路由·数据建模·arkui
贾伟康2 小时前
【电路实验模拟|03】HarmonyOS ArkTS 交通灯实战:用定时状态切换红黄绿灯
harmonyos·arkts·canvas·arkui·交通灯
匠云创新16 小时前
读完一万段要两分钟:我们把标书读取从 WPS 对象模型搬到了 docx 解析
性能优化·node.js
贾伟康19 小时前
HarmonyOS API 26 嵌套 Navigation:getParent、父子栈边界与返回分发
harmonyos·arkts·navigation·嵌套路由·navpathstack
行者-全栈开发20 小时前
【鸿蒙心迹】多线程并发实战——TaskPool 与 Worker 选型与踩坑(HarmonyOS 7.x)
华为·harmonyos·多线程并发·worker·taskpool·线程通信·harmonyos 并发
打工仔折腾 AI21 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
OH_TPC1 天前
@ohos/aki 源码解读(一):一行绑定背后,宏、模板与索引分发
harmonyos
贾伟康1 天前
【解压时刻|13】HarmonyOS ArkTS 启动链路审计:从 EntryAbility、AppStore 到 Navigation 首屏
harmonyos·arkts·appstorage·应用启动·entryability