应用性能优化实践(三)减少丢帧卡顿

一、减少丢帧卡顿的方法

1、避免在主线程上执行耗时的操作

UI主线程是HarmonyOS应用中最重要的线程之一,在主线程上执行耗时的操作会阻塞UI渲染,从而导致UI主线程的负载过高。因此,可以将耗时操作放在TaskPool或Worker等后台线程中执行。

2、减少渲染进程的冗余开销

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

3、减少视图嵌套层级

应用开发中的用户界面(UI)布局是用户与应用程序交互的关键部分。不合理的布局越多,视图的创建、布局、渲染等流程所需的时间就越长。因此,减少嵌套层次或者使用高性能布局节点,可以减少丢帧卡顿。

4、组件配合使用LazyForEach

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

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

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

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

二、减少渲染进程的冗余开销

1、动画场景

(1)组件转场动画推荐使用transition

(2)动画参数相同时使用同一个animateTo

由于每次animateTo都需要进行动画对比,使用多个animateTo的性能不如只使用一个animateTo。特别针对设置在同一组件的属性,能减少该组件更新的次数。

(3)多次animateTo时统一更新状态变量

animateTo会将执行动画闭包前后的状态进行对比,对差异部分进行动画。为了对比,会在执行animateTo的动画闭包之前,将所有变更的状态变量和脏节点都刷新。如果多个animateTo之间存在状态更新,会导致执行下一个animateTo之前又存在需要更新的脏节点,可能会造成冗余更新。

2、合理使用RenderGroup

首次绘制组件时,若组件被标记为rendergroup状态,将对组件以及其子节点进行离屏绘制,将绘制结果结果进行缓存,此后当需要重新绘制组件时,就会优先使用缓存而不必重新绘制,从而降低绘制负载,优化渲染性能。

3、减少视图层级嵌套

嵌套层级越深,会有更大的系统内存开销。因此在开发过程中,要尽可能减少布局嵌套,是布局更加扁平化。例如RelativeContainer可以根据锚点来进行低嵌套层级复杂布局,而List和Grid等高级组件不但能使布局扁平化,而且支持懒加载等提升性能的方法,是更加推荐的布局方式。

4、组件复用

推荐场景:

滑动场景下对同一类自定义组件进行频繁的创建与销毁;

反复切换条件渲染的控制分支,且控制分支中的组件子树结构相同。

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

不推荐使用更新单个状态变量的形式自行控制多个组件更新时机(命令式)。

推荐使用状态变量和组件---绑定的方式,以数据的变更驱动组件的刷新(声明式)。

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

合理控制状态更新范围,避免关联刷新较大范围或者渲染较慢的组件。

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

理解@Prop和@ObjectLink的区别:@Prop是深拷贝,@ObjectLink是浅拷贝

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

相关推荐
遇到困难睡大觉哈哈13 小时前
HarmonyOS —— Remote Communication Kit 拦截器(Interceptor)高阶定制能力笔记
笔记·华为·harmonyos
遇到困难睡大觉哈哈14 小时前
HarmonyOS —— Remote Communication Kit 定制处理行为(ProcessingConfiguration)速记笔记
笔记·华为·harmonyos
氤氲息15 小时前
鸿蒙 ArkTs 的WebView如何与JS交互
javascript·交互·harmonyos
遇到困难睡大觉哈哈15 小时前
HarmonyOS支付接入证书准备与生成指南
华为·harmonyos
赵浩生15 小时前
鸿蒙技术干货10:鸿蒙图形渲染基础,Canvas绘图与自定义组件实战
harmonyos
赵浩生15 小时前
鸿蒙技术干货9:deviceInfo 设备信息获取与位置提醒 APP 整合
harmonyos
BlackWolfSky15 小时前
鸿蒙暂未归类知识记录
华为·harmonyos
L、21817 小时前
Flutter 与开源鸿蒙(OpenHarmony):跨平台开发的新未来
flutter·华为·开源·harmonyos
L、21818 小时前
Flutter 与 OpenHarmony 深度融合实践:打造跨生态高性能应用(进阶篇)
javascript·flutter·华为·智能手机·harmonyos