当前位置: 首页 > article >正文

HarmonyOS(57) UI性能优化

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

UI性能优化

  • 1、避免在组件的生命周期内执行高耗时操作
  • 2、合理使用ResourceManager
  • 3、优先使用@Builder方法代替自定义组件
  • 4、参考资料

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

HarmonyOS自定义组件的生命周期如下图:
在这里插入图片描述
如上图所示,自定义组件在build函数执行之前,将先执行aboutToAppear()生命周期回调函数。此时若在该函数中执行耗时操作,将阻塞UI渲染,增加UI主线程负担。因此,应尽量避免在自定义组件的生命周期内执行高耗时操作,在aboutToAppear()生命周期函数内建议只做当前组件的初始化逻辑。
解决思路:对于复杂计算的耗时场景,可以将计算结果进行缓存处理。对于不需要等待结果的高耗时任务,可以采用多线程处理该任务,通过并发的方式避免主线程阻塞。

2、合理使用ResourceManager

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

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组件性能优化


http://www.kler.cn/a/409344.html

相关文章:

  • 单片机_简单AI模型训练与部署__从0到0.9
  • 标贝科技大模型声音复刻 快速获取高品质专属AI声音
  • uni-app 界面TabBar中间大图标设置的两种方法
  • AIGC学习笔记(6)——AI大模型开发工程师
  • 无线图传下的低延迟视频传输播放技术探讨
  • 快速获取镜像包的方法
  • Golang语言系列-Channel
  • 《数据结构》学习系列——图(中)
  • 基于 BP 神经网络整定的 PID 控制
  • 根据气候变化自动制定鲜花存储策略(BabyAGI)
  • MCSA --- make coding simple again
  • C#里怎么样实现多播委托?
  • AIGC-------AIGC与创意写作:威胁还是机遇?
  • [webgis 0基础到找工作]------JavaScript进阶--作用域,解构,函数 day14
  • [webgis 0基础到找工作]------JavaScript--Bom day12
  • 地平线 bev_cft_efficientnetb3 参考算法-v1.2.1
  • 如何进行高级红队测试:OpenAI的实践与方法
  • HTTPSOK ---助力阿里云免费 SSL 证书自动续期
  • 废品买卖回收管理系统|Java|SSM|Vue| 前后端分离
  • Jmeter中的定时器
  • 基于STM32F103的FreeRTOS系列(十四)·软件定时器
  • 【Excel】拆分多个sheet,为单一表格
  • 微调Helsinki-NLP-en-zh模型
  • Python爬虫:如何从1688阿里巴巴获取公司信息
  • RTVS视频服务应用
  • [Golang]传递一个切片(slice)和使用变参(...)语法传递多个参数之间的区别