【鸿蒙应用开发】性能优化

应用启动

启动图标

启动页图标分辨率过大,解码耗时会影响应用的启动速度,建议启动页图标分辨率不超过256像素*256像素,如果使用大尺寸图标(4096像素*4096像素),通过使用 SmartPerf 工具分析性能,可发现启动速度存在数倍差异。

对比数据如下:

阶段开始(秒) 阶段结束(秒) 阶段时长(秒)
4096像素 * 4096像素 5419.484537973 5420.327775266 0.843237293
144 像素 * 144像素 4186.436835246 4186.908777335 0.471942089

减少AbilityStage生命周期回调函数的同步代码

应用启动初期,系统会先执行 AbilityState 生命周期回调函数。因此,最好不要在回调函数中执行耗时的同步任务,如加解密等密集计算任务。

减少UIAbility生命周期回调函数的同步代码

在AbilityStage 启动完成后,UIAbility将被适时调度,同样地:在Ability生命周期回调函数中,同样不要执行耗时同步任务。耗时操作建议开启线程进行。

同时,UIAbility 中的包导入也会影响启动速度(在运行时,应用会加载全部导入的模块,加载的数量和大小会拖慢启动)。

使用应用启动框架加快启动

这通常用来解决应用启动时需要执行一系列初始化任务的问题,应用启动框架由系统调度,(在创建ABilityStage之后,在启动UIAbility之前)支持配置异步任务启动,来加快应用启动速度。

应用启动框架AppStartuphttps://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-startup-V5

渲染方面

正确使用 aboutToAppear

使用 aboutToAppear 回调函数执行异步代码,避免在该函数内执行耗时同步代码,这将阻塞页面绘制。

Repeat:可复用的循环渲染

Repeat 一般会用于取代 ForEach,相较后者具有更强的渲染性能,Repeat 具有两种工作模式:

non-virtualScroll 模式

在初始化页面时就加载列表中的全部子组件。

相比于ForEach,具有一定的性能优化,一方面针对数据的更新性能进行了优化,其次是生成函数中的索引管理转移到了框架层。

virtualScroll 模式

需要开启 virtualScroll 开关,它属于动态加载机制,通过可视区域 + 预加载区域来加载子组件,当你的容器滑动或者数组元素改变时,它会重新计算加载返回,帮助你管理节点的创建和销毁。

适合场景

懒加载长数据列表,希望通过组件复用来优化性能表现的场景。

示例代码
// 在List容器组件中使用Repeat virtualScroll模式
@Entry
@ComponentV2 // 推荐使用V2装饰器
struct RepeatExample {
  @Local dataArr: Array<string> = []; // 数据源

  aboutToAppear(): void {
    for (let i = 0; i < 50; i++) {
      this.dataArr.push(`data_${i}`); // 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值