应用启动
启动图标
启动页图标分辨率过大,解码耗时会影响应用的启动速度,建议启动页图标分辨率不超过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之前)支持配置异步任务启动,来加快应用启动速度。
应用启动框架AppStartup
https://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}`); //

最低0.47元/天 解锁文章
2223

被折叠的 条评论
为什么被折叠?



