首页 > 其他分享 >HarmonyOS 性能优化

HarmonyOS 性能优化

时间:2024-04-17 15:55:39浏览次数:10  
标签:状态变量 动画 性能 List HarmonyOS 组件 优化 加载

如何合理使用动效来获得更好的性能

  1. 组件转场动画使用 transition

    • 推荐使用转场动画(transition)而不是组件动画(animateTo),因为 transition 只需要在条件改变时更新一次,而 animateTo 需要在动画前后做两次属性更新,导致性能开销更大。
    • 反例:通过改变透明度属性并使用 animateTo 来隐藏和显示组件。
    • 正例:直接使用 transition 动画,通过改变透明度实现组件的出现与消失。
 
  1. 组件布局改动时使用图形变换属性动画

    • 当需要改动组件的布局显示时,推荐使用图形变换属性(如平移、旋转、缩放)而不是改动布局属性(如 width、height、layoutWeight),因为图形变换不会重新触发布局,从而减少性能开销。
    • 反例:通过设置布局属性 width 和 height 来改变组件大小。
    • 正例:通过设置图形变换属性 scale 来改变组件大小。
 
  1. 动画参数相同时使用同一个 animateTo

    • 如果多个属性需要使用相同的动画参数进行动画处理,应该将它们合并到一个 animateTo 闭包中,以减少组件更新的次数。
    • 反例:将相同动画参数的状态变量更新放在不同的动画闭包中。
    • 正例:将相同动画参数的动画合并在一个动画闭包中。
 
  1. 多次 animateTo 时统一更新状态变量

    • 在执行多个 animateTo 之前,应该统一更新状态变量,避免在执行动画之间产生冗余的状态更新。
    • 反例:在两个 animateTo 之间更新状态变量。
    • 正例 1:在 animateTo 之前使用原始状态,让动画从原始状态过渡到指定状态。
    • 正例 2:在 animateTo 之前显式指定所有需要动画的属性初值,统一更新到节点中,然后再执行动画。

应用性能提升

1. 使用数据懒加载

  在处理长列表数据时,传统的循环渲染方式会一次性加载所有列表元素,这会导致页面启动时间过长,影响用户体验,并增加服务器压力。为了解决这个问题,推荐使用 DataSource 来实现数据懒加载技术。通过懒加载,只有当数据进入可视区域时才加载和渲染,这样可以显著提高页面的响应速度和性能。  

2. 设置 List 组件的宽高

  在使用 Scroll 容器组件嵌套 List 组件加载长列表时,如果没有指定 List 的宽高尺寸,List 将会布局其所有子组件,这会导致性能问题。通过设置 List 的宽高,可以确保只布局 List 显示区域内的子组件,从而提高性能。
Scroll 嵌套 List 时:
  • List 没有设置宽高,会布局 List 的所有子组件。
  • List 设置宽高,会布局 List 显示区域内的子组件。
  • List 使用 ForEach 加载子组件时,无论是否设置 List 的宽高,都会加载所有子组件。
  • List 使用 LazyForEach 加载子组件时,没有设置 List 的宽高,会加载所有子组件,设置了 List 的宽高,会加载 List 显示区域内的子组件。

3. 使用条件渲染替代显隐控制

  使用 visibility 属性控制组件的显隐状态时,即使组件不可见,它仍然会被重新创建,这会造成性能损耗。通过使用 if 条件渲染,可以避免组件的重新创建过程,从而提升性能。  

4. 使用 Column/Row 替代 Flex

  Flex 容器组件在默认情况下存在 shrink 属性,这可能导致二次布局,影响页面渲染性能。通过使用 Column 和 Row 组件替代 Flex,可以避免二次布局带来的性能问题。  

5. 减少应用滑动白块

  在应用中,滑动白块是一个常见的性能问题。通过增大 List/Grid 控件的 cachedCount 参数,可以预加载更多的 item,减少白块的出现。同时,如果需要请求网络图片,可以提前下载内容,以减少滑动时的白块现象。

状态管理优化

以下是文档中提到的一些关键点:  
  1. 使用@ObjectLink 代替@Prop 减少不必要的深拷贝
在父子组件间传递数值时,如果子组件不需要改变状态变量的值,使用@ObjectLink 比@Prop 更优,因为@Prop 会导致深拷贝,增加性能开销。  
  1. 不使用状态变量强行更新非状态变量关联组件:开发者应避免通过改变自定义的 UI 状态变量来带动常规变量的更新,而应将相关成员变量用@State 装饰,以便框架能够检测状态变化并触发 UI 更新。
 
  1. 精准控制状态变量关联的组件数:建议每个状态变量关联的组件数少于 20 个,以减少不必要的组件刷新,提高效率。
 
  1. 合理控制对象类型状态变量关联的组件数量:如果一个复杂对象被定义为状态变量,需要合理控制其关联的组件数,避免“冗余刷新”。
 
  1. 查询状态变量关联的组件数:可以使用 HiDumper 工具查看状态变量关联的组件数,进行性能优化。
 
  1. 避免在 for、while 等循环逻辑中频繁读取状态变量:应该在循环外面读取状态变量,避免在循环逻辑中频繁读取,以提高性能。
 

避免冗余操作

 
  1. 避免在高频回调中进行冗余操作:在处理如滚动事件、触摸事件等高频回调时,应避免在回调函数内部执行冗余的日志记录、Trace追踪和耗时操作。这些操作会严重影响应用的性能和响应速度。
 
  1. 删除冗余Trace和日志打印:在开发阶段,日志和Trace追踪是重要的辅助工具,但在发布版本中应移除这些冗余的输出,以避免不必要的性能开销。
 
  1. 避免设置冗余的系统回调监听:如果回调函数体内不包含任何业务逻辑代码,应将其删除。注册但未使用的回调会消耗系统资源,影响程序运行效率。
 

标签:状态变量,动画,性能,List,HarmonyOS,组件,优化,加载
From: https://www.cnblogs.com/androidsuperman/p/18140928

相关文章

  • HarmonyOS 项目 module.json5默认配置属性及描述
    module.json5entry>src>main>module.json5是模块的配置文件,包含当前模块的配置信息。 其中module对应的是模块的配置信息,一个模块对应一个打包后的hap包,hap包全称是HarmonyOSAbilityPackage,其中包含了ability、第三方库、资源和配置文件。其具体属性及其描述可以参照下表1。......
  • 鸿蒙HarmonyOS实战-ArkUI组件(Shape)
    ......
  • 云主机AI服务的性能测试和优化
    本文分享自天翼云开发者社区《云主机AI服务的性能测试和优化》,作者:无敌暴龙兽在云计算的时代,越来越多的人选择将AI模型部署在云主机上,以便利用云服务提供商的弹性和可扩展性。然而,仅仅将AI模型部署到云主机上并不足以保证其性能和效率。本文将介绍云主机AI服务的性能测试和优化的......
  • GreatSQL优化技巧:半连接(semijoin)优化
    何为半连接?半连接是在GreatSQL内部采用的一种执行子查询的方式,semijoin不是语法关键字,不能像使用innerjoin、leftjoin、rightjoin这种语法关键字一样提供给用户来编写SQL语句。两个表t1表和t2表进行半连接的含义是:对于t1表的某条记录来说,我们只关心在t2表中是否存在与之匹配......
  • HarmonyOS-基础之动画
    1、是什么?动画可以在UI界面发生变化时,提供渐变过渡效果,提升用户体验。动画的实现原理是通过在一段时间内连续播放一系列静止画面(帧),从而产生流畅的视觉效果。ArkUI提供了多种动画接口,例如:显式动画、属性动画、转场动画等,来实现各种动画效果。2、显示动画animateTo()是ArkUI......
  • 关于渲染优化记录
    项目中需要使用渲染优化,因为打开村庄或者关卡,显卡温度太高70-80摄氏度,需要优化,当然渲染上优化有提升帧率,提升游戏稳定性(流畅度),而该优化侧重性能方法上分为项目开发时的设置优化,开发时的逻辑优化,发包后运行时的设置优化 关于项目开发时的现有方法: 放置CullDistanceVolume. ......
  • HarmonyOS开发(一)
    1、安装 DevEcoStudio链接:https://developer.huawei.com/consumer/cn/deveco-studio/2、安装配置环境 为保证DevEcoStudio正常运行,建议电脑配置满足如下要求:操作系统:Windows1064位、Windows1164位内存:8GB及以上硬盘:100GB及以上分辨率:1280*800像素及以上4、配置......
  • java JIT优化
    JIT优化1.公告子表达式消除如果一个表达式的出现多次,并且每次的参数值没有改变,那只需要计算一次,接下来的碰到这个表达式,都会直接取上一次计算的结果如:intx=a*b+c+d*(a*b);  //a*b是一个公共子表达式,计算了一遍以后,第二次的时候,这个子表达式的参数值都没有变化,所以直接使......
  • React性能优化手册
    此文章属于笔记总结。对应的课程地址:https://www.pluralsight.com/courses/react-performance-playbook相关网站:https://web.developers.google.cn/?hl=zh-cn性能审查检测指标CoreWebvitals:衡量网站是否运行正常的基本指标LCP,LargestContentfulPaint最大内容绘制......
  • mysql sql优化
    1select*杜绝使用不会走索引增加资源消耗2小表驱动大表大表不仅仅是现在大更可能是以后大的表一直新增数据的表3提升groupby效率给groupby字段设置索引4一行一行的插入改为批量插入5大数据表查询时使用limit限制数据的条数深翻页优化1》使用自增id2......