鸿蒙性能优化相关

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层)

相关推荐
前端青山8 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
青云交13 小时前
大数据新视界 -- 大数据大厂之 Impala 性能优化:应对海量复杂数据的挑战(上)(7/30)
大数据·性能优化·impala·数据分区·查询优化·海量复杂数据·经典案例
chusheng184016 小时前
Python 爬取大量数据如何并发抓取与性能优化
开发语言·python·性能优化
XMYX-01 天前
MySQL 性能优化策略:提升响应速度与系统稳定性
mysql·性能优化
PangPiLoLo2 天前
高可用架构-业务高可用
java·性能优化·架构
尸僵打怪兽2 天前
软考(中级-软件设计师)数据库篇(1101)
数据库·oracle·性能优化·软考
程序猿进阶2 天前
系统上云-流量分析和链路分析
java·后端·阿里云·面试·性能优化·系统架构·云计算
飞腾开发者3 天前
飞腾平台Arm ComputeLibrary编译安装指南
linux·服务器·arm开发·后端·性能优化
新知图书3 天前
MySQL 9从入门到性能优化-系统信息函数
数据库·mysql·性能优化
Databuff4 天前
JVM性能优化实战手册:从监控到调优策略
linux·运维·jvm·性能优化·自动化·devops