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

【HarmonyOS 4】应用性能优化

1. ArkTs 高性能编程

1.1 ArkTs 高性能编程规则

  • 1.1.1 限制一些 TypeScript 的特性,比如需要不支持属性的动态变更、变量或参数需要明确的类型声明和返回值声明等。
  • 1.1.2 禁用 @ts-ignore、@ts-expect-error 等屏蔽编译校验的命令。
  • 1.1.3 开启 TypeScript 的严格模式,比如需要严格判空、严格函数类型检查、严格成员初始化等,提高代码的质量和可维护性,避免一些常见错误。
  • 1.1.4 ArkTs 不支持 any 和 unknown 类型。

1.2 使用 AOT 模式对应用进行编译优化
AOT 即提前编译,能够在 Host 端将字节码提前编译成 Target 端可运行的机器码,这样字节码可以获得充分编译优化,放到 Target 端运行时可以获得加速。

2. 提升应用启动和响应速度

2.1 提升应用冷启动的方法

  • 2.1.1 缩短应用进程创建和初始化阶段耗时
    设置合适分辨率的 startWindowIcon
  • 2.1.2 缩短 Application 和 Ability 初始化阶段耗时
    减少首页 Ability 或者 Page 中 import 的模块
  • 2.1.3 缩短 Ability 生命周期阶段耗时
    使用异步加载,避免阻塞生命周期。
  • 2.1.4 缩短加载绘制首页阶段耗时
    延迟加载,使用 LazyForEach 懒加载形式,减少首页数据的加载,做一些冗余加载的消除,提升首桢绘制的速度。

2.2 使用异步加载
异步接口或异步加载

2.3 使用动态加载
使用 async await 动态加载 import 模块。

2.4 延迟加载
长列表场景中,使用 LazyForEach 代替 ForEach。

2.5 使用缓存
当使用 LazyForEach 时,可以搭配使用 .cachedCount() 方法,自定义控制列表的缓存数量,实现更优的滑动体验。

3. 减少丢帧卡顿

3.1 避免在主线程上执行耗时任务
可以将耗时操作放在 TaskPool 或者 Worker (等后台线程)这俩个系统的子线程运行能力,在子线程中执行。

3.2 减少渲染进程的冗余开销
使用资源图代替绘制、合理使用 .renderGroup(true)(系统机制)、尺寸位置设置尽量使用整数,可以减少渲染所需时间,从而减少丢帧卡顿。
组件转场动画推荐使用 transtion。

3.3 减少视图嵌套层级

3.4 组件复用配合 LazyForEach
组件复用功能,使用 @Reusable 装饰器 标记这个组件后,实现 aboutToReuse(params) 方法,把需要更新的信息复制到需要复用的这个组件里面。

3.5 精确控制状态变量的关联组件数
推荐使用状态变量和组件一一绑定的方式,以数据的变更驱动组件的刷新(声明式)。
合理控制状态更新范围,避免关联刷新较大范围或者渲染较慢的组件。

3.6 在对象上谨慎使用状态变量关联
@Prop 是深拷贝,@ObjectLink 是浅拷贝,使用效果相同的场景下,优先使用 @ObjectLink 的方式较少系统内存开销。

4. 使用性能调优工具

http://www.lryc.cn/news/433682.html

相关文章:

  • MySQL——表操作
  • 阅读笔记--Guiding Attention in End-to-End Driving Models(二)
  • Linux: network: TCP: errno: EWOULDBLOCK
  • 闲话“设计模式”
  • Sentence-BERT实现文本匹配【CoSENT损失】
  • 业余考什么证书比较实用?
  • 16款facebook辅助工具,总有一款适合你!
  • 给网站发外链的好处,你了解多少?
  • 安卓链接正常显示,ios#符被转义%23导致链接访问404
  • excel分列
  • STM32 HAL DMA 中断碰到的问题
  • 让树莓派智能语音助手实现定时提醒功能
  • AIoTedge边缘计算+边缘物联网平台
  • Java使用拷贝asset文件,解密,并用DexclassLoader加载执行
  • 【AcWing】861. 二分图的最大匹配(匈牙利算法)
  • 经验笔记:JSP(JavaServer Pages)
  • 【零基础必看的数据库教程】——SQL WHERE 子句
  • vscode docker debug python
  • 【Kubernetes】常见面试题汇总(四)
  • MATLAB基础语法知识
  • PopupInner源码分析 -- ant-design-vue系列
  • Maven 的 pom.xml 文件中<dependency> 元素及其各个参数的解释
  • 【信创】Linux终端禁用USB存储 _ 统信 _ 麒麟 _ 方德
  • 开放API接口时要注意的安全处理总结
  • FastGPT自定义插件的icon
  • SprinBoot+Vue旅游网站的设计与实现
  • 代码随想录刷题day27丨455.分发饼干 ,376. 摆动序列 ,53. 最大子序和
  • Detect It Easy
  • c++开关灯
  • DevOps实现CI/CD实战(六)- Jenkins集成k8s