鸿蒙性能优化相关

ArkTS基于TypeScript设计,但又有所区别,比如ArkTS不支持属性的动态变更,变量或参数需要明确和返回值声明。

提升应用启动和相应速度

什么是冷启动:应用第一次启动,后台无该进程,需要创建新的进程,这种启动方式叫做冷启动

使用异步加载:

使用异步加载可以在后台线程中处理耗时操作,提升相应速度

延迟加载:

将不必要的资源延迟加载可以减少启动时间。使用list,grid,swiper等容器组件时配合系统提供的lazyforeach数据懒加载能力,可以有效减少启动时间和内存占用。

使用缓存:

选择合适的缓存策略可以提高应用程序的性能和相应速度,从而提高应用的相应速度

HarmongOS应用启动过程:

启动过程大概可以分为四个阶段

第一阶段:应用进程创建&初始化

StartAbility,StartProcess,MainThread init&Attach

第二阶段:Application&Ability初始化

HandleLaunch Application,HandleLaunch Ability

第三阶段:Ability生命周期

HandleAbility Transaction

第四阶段:加载绘制首页

OnLoad Content,LoadPage Source,OnVsyncEvent

提升冷启动的方法:

1,缩短应用进程创建&初始化阶段耗时:设置合适分辨率的startWindowIcon

2,缩短Application&Ability初始化阶段耗时,减少Ability或者Page中import模块

3,缩短Ability生命周期阶段耗时:使用异步加载

4,缩短加载绘制页面阶段耗时:延迟加载

如何减少丢帧卡顿

避免主线程执行耗时操作

UI主线程上执行耗时操作会阻塞UI渲染,导致UI线程负载过高,可以将耗时操作放在TaskPool或者Worker等后台线程中执行

减少渲染进程的冗余开销

使用资源图代替绘制,合理使用renderGroup,尺寸位置尽量设置尽量使用整数,可以减少渲染所需的时间,从而减少丢帧卡顿

减少视图嵌套层级

减少嵌套层次使用高性能布局节点,可以减少丢帧卡顿

组件复用配合LazyForEach

使用ArkUI开发范式提供的组件复用机制,通过重复利用已经创建过并缓存的组件对象,降低组件短时间内频繁创建和销毁的开销,提升组件加载效率,降低UI线程负载,从而减少丢帧卡顿。

精确控制状态变量的关联组件数

@State等状态变量关联的组件越多,状态变动时刷新的组件也越多,UI线程负载越重,因此移除冗余的组件关联可以减少丢帧卡顿

在对象上谨慎使用状态变量关联

@Prop是深拷贝,@ObjectLink是浅拷贝,Prop直接复制了整个数据,而ObjectLink是引用的拷贝

所以在@Prop和@ObjectLink使用效果相同的场景下优先使用ObjectLink方式可以减少系统内存开销

使用if/else和visibility属性控制
  • 通过if条件判断控制显示与隐藏的方式:
    • 对比判断值为true和false时,初次加载过程中Measure、Layout时间明显存在区别,并且从组件创建时间可以判断,加载时会根据初始值判断是否创建对应组件内容。
    • 当条件为false时,对应的组件内容不参与创建、Measure和Layout阶段。
  • 通过visibility控制显示与隐藏的方式:
    • 在初次加载时,无论visibility的值为Visibility.None还是Visibility.Visible都会创建对应组件内容。
    • visibility属性控制的是Measure和Layout阶段,当visibility属性为Visibility.None时,对应的组件不参与Layout。

结论:建议经常控制出现隐藏的使用visibility控制

不经常出现的使用if判断是否出现

丢帧卡顿

应用丢帧通常指的是在应用程序的界面绘制过程中,由于某些原因导致界面绘制的帧率下降,从而造成界面卡顿、动画不流畅等问题。以60Hz刷新率为例子,想要达到每秒60帧(即60fps)的流畅体验,每一帧需要在16.7ms内完成,如果超过16.7ms未完成渲染,就可能会出现丢帧。

在HarmonyOS中,图形系统采用了统一渲染的模式,遵循着一个典型的流水线模式,以90Hz刷新率为例,每个Vsync周期是11.1ms,整个过程如下图所示。如果是60Hz,每个Vsync的周期是16.7ms;如果是120Hz,则每个Vsync的周期是8.3ms。

总结

布局性能优化

布局时应尽量减少总节点数,减少性能消耗

优化方向

1,移除冗余的节点

2,使用扁平化布局减少节点数

具体内容:

移除多余的外层线性布局

切换不同的布局类型实现扁平化

合理控制元素的显示隐藏

设置固定宽高减少measure的耗时(未设置和百分比宽高性能消耗较大)

仅在必要环境下使用高性能布局

长列表加载性能优化

主要分为四种

懒加载(10000条数据以上时建议使用lazyforeach)

缓存列表项(额外缓存部分列表项,一般为页面数据显示条数/2)

组件复用(减少组件创建的耗时操作@Reusable,aboutToReuse)

布局优化(相对布局,控制布局在5-8层)

相关推荐
凌云拓界5 小时前
前端开发的“平衡木”:在取舍之间找到最优解
前端·性能优化·架构·前端框架·代码规范·设计规范
冬奇Lab6 小时前
应用异常退出实战分析:一次"幽灵杀手"引发的车载系统故障排查
android·性能优化·debug
tianyuanwo13 小时前
Rsync 性能优化实战:从慢速同步到高效传输的深度调优
性能优化·rsync·跨主机
升讯威在线客服系统15 小时前
从 GC 抖动到稳定低延迟:在升讯威客服系统中实践 Span 与 Memory 的高性能优化
java·javascript·python·算法·性能优化·php·swift
DemonAvenger15 小时前
深入理解Kafka分区策略:实现数据均衡分布的最佳实践
性能优化·kafka·消息队列
许愿OvO15 小时前
大规模Web服务Nginx核心配置与性能优化实战
linux·nginx·性能优化
笨小孩丶17 小时前
前端性能优化实战:Map映射 vs 递归,差距210倍!
前端·性能优化·webworker·map映射·大数据渲染
国科安芯1 天前
芯片抗单粒子性能研究及其在商业卫星测传一体机中的应用
嵌入式硬件·安全·fpga开发·性能优化·硬件架构
小龙报2 天前
【Coze-AI智能体平台】Coze 工作流 = 智能体的 “流程管家”?一文解锁自动化落地新玩法
人工智能·语言模型·自然语言处理·性能优化·数据分析·知识图谱·需求分析
一个天蝎座 白勺 程序猿2 天前
国产数据库破局之路——KingbaseES与MongoDB替换实战:从场景到案例的深度解析
开发语言·数据库·mongodb·性能优化·kingbasees·金仓数据库