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. 避免设置冗余的系统回调监听:如果回调函数体内不包含任何业务逻辑代码,应将其删除。注册但未使用的回调会消耗系统资源,影响程序运行效率。

文章转载自:西北野狼

原文链接:https://www.cnblogs.com/androidsuperman/p/18140928

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/554660.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++二分排序(向右

描述 给出有 n 个元素的由小到大的序列&#xff0c;请你编程找出某元素最后一次出现的位置。 (n<10^6 输入描述 第一行&#xff1a;一个整数&#xff0c;表示由小到大序列元素个数&#xff1b;下面 n 行&#xff0c;每行一个整数&#xff1b; 最后一行 一个整数 x&#x…

UE4_动画基础_相同骨骼的动画重定向步骤

学习笔记&#xff0c;仅供参考&#xff01; 动画重定位 是对现有动画稍加修改后用于多个角色的过程&#xff0c;它使你无需创建全新的动画&#xff0c;因为你可以在多个角色间共享动画资源。 存在两种形式的动画重定位&#xff0c;在第一种形式中&#xff0c;你要与之共享动画…

Python 全栈体系【四阶】(三十一)

第五章 深度学习 五、PaddlePaddle 基础 1. PaddlePaddle 简介 1.1 什么是 PaddlePaddle PaddlePaddle&#xff08;Parallel Distributed Deep Learning&#xff0c;中文名飞桨&#xff09;是百度公司推出的开源、易学习、易使用的分布式深度学习平台 源于产业实践&#xf…

鸿源城:时间在变,不变的是传承的味道

冬瓜&#xff0c;原产我国南部和印度地区&#xff0c;这是一种夏天才会结果的作物&#xff0c;却起了一个反季的名字&#xff0c;因为它结果的时候&#xff0c;表面上布满了蜡质白粉&#xff0c;看起来和结霜一样&#xff0c;美其名曰“冬瓜”。 台山海宴镇对于冬瓜却情有独钟&…

Java面试八股之Iterator和ListIterator的区别是什么

Iterator和ListIterator的区别是什么 这道题也是考查我们对迭代器相关的接口的了解程度&#xff0c;从代码中我们可以看出后者是前者的子接口&#xff0c;在此基础上做了一些增强&#xff0c;并且只用于List集合类型。 定义与基本概念 Iterator&#xff1a; 定义&#xff1a…

线上线下交友社区系统 可打包小程序 支持二开 源码交付!

社交网络的普及&#xff0c;人们交友的方式发生了巨大的变化。过去&#xff0c;我们主要通过线下的方式来结识新朋友&#xff0c;比如在学校、工作场所、社交活动或者兴趣小组中。然而&#xff0c;随着移动端软件的发展&#xff0c;线上交友也逐渐变得流行。 方便性&#xff1a…

回归预测 | Matlab实现DBO-HKELM蜣螂算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现DBO-HKELM蜣螂算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现DBO-HKELM蜣螂算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现DBO-HKELM蜣螂算法优化混合核极限学习机多变量…

vue2和vue3的v-if与v-for优先级对比

Vue.js 中使用最多的两个指令就是 v-if 和 v-for&#xff0c;因此我们可能会想要同时使用它们。虽然官方不建议这样做&#xff0c;但有时确实是必须的&#xff0c;我们来了解下他们的工作方式&#xff1a; 在 vue 2.x 中&#xff0c;在一个元素上同时使用 v-if 和 v-for 时&am…

收到网贷短信起诉获赔500!网友:数了下能发财了……

不知道从什么时候起&#xff0c;手机上的短信功能成了各类广告垃圾站。 前两天&#xff0c;小柴有朋友还吐槽&#xff0c;要不是还能收个验证码&#xff0c;真想把短信功能关闭了之。‍‍‍‍‍‍‍‍‍‍‍ 小柴深感共鸣&#xff0c;如今的手机短信&#xff0c;真是不想打开了…

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现

前言 上文说到&#xff0c;Spring Security它是一个强大的和高度可定制的身份验证和访问控制框架。它提供了一套丰富的功能&#xff0c;用于保护基于Spring的应用程序。 上文又说到&#xff0c;在Spring Security中&#xff0c;过滤器&#xff08;Filter&#xff09;是一个重…

SOP8、SOP16、SOP24脚语音芯片在性能上有哪些不同

随着语音识别技术的不断发展&#xff0c;人们对语音芯片的需求也越来越高。其中&#xff0c;SOP8、SOP16和SOP24脚语音芯片是目前市面上应用比较广泛的芯片类型。这些芯片在性能上有什么区别&#xff1f;下面我们来具体分析一下。 &#xff0c;SOP8、SOP16、SOP24脚语音芯片在引…

Vscode | Python | launch.json配置gevent多进程断点失效问题处理

Vscode | Python | launch.json配置gevent多进程断点失效问题处理 文章目录 情况描述↓↓↓解决办法直接看这里↓↓↓ 情况描述 launch.json {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more i…

Centos7.9(虚拟机) GNOM图形界面(安装 GParted) 磁盘分区 挂载 扩容

目录 安装分区软件GParted 新磁盘创建分区过程和必要性&#xff08;其实可以直接使用整个磁盘&#xff09; 挂载步骤 创建分区表并分区 然后去磁盘挂载 成功挂载 搜索关键词 Centos7.9&#xff08;虚拟机 linux&#xff09; GNOM图形界面&#xff08;安装 GParted&…

以时分秒为单位累计设备运行时间功能块(SMART PLC梯形图代码)

1、SMART PLC设备累计运行时间功能块 SMART PLC设备累计运行时间功能块_plc计算累计时间-CSDN博客文章浏览阅读765次。PLC FC 、FB、子程序、函数学习笔记_RXXW_Dor的博客-CSDN博客FC、 FB、 子程序&#xff0c;&#xff08;甚至包括一些指令&#xff09;这些称呼其实并没有本…

短视频评论ID批量采集提取工具|dy视频评论关键词下载软件

短视频评论ID批量采集提取工具&#xff1a;智能拓客&#xff0c;精准洞察用户声音 在当今数字化营销时代&#xff0c;了解用户的需求和反馈对于企业的发展至关重要。而作为流行的短视频平台&#xff0c;短视频评论蕴含了丰富的用户信息和市场洞察。为了帮助企业高效获取这些宝…

Mabtech:与结核病相关的肽库

Mabtech 新研发出了三个涵盖结核蛋白&#xff08;EspC、ESAT-6、CFP-10&#xff09;的肽库&#xff0c;可以区分潜伏性结核病和活动性结核病的区别。所有肽库都经过验证&#xff0c;都可用于ELISpot、FluoroSpot实验。 1. EspC scanning pool ● EspC scanning pool包含来自结…

监控系统Prometheus--与第三方框架集成

文章目录 Prometheus和Flink集成拷贝jar包修改Flink配置为了运行测试程序&#xff0c;启动netcat启动hdfs、yarn&#xff0c;提交flink任务到yarn上可以通过8088跳到flinkUI的job页面&#xff0c;查看指标统计刷新Prometheus页面&#xff0c;如果有flink指标&#xff0c;集成成…

大模型应用实践闭门研讨会即将召开|爱分析活动

随着人工智能领域大模型技术的快速发展&#xff0c;政府出具很多指导性意见&#xff0c;在最新的《2024年政府工作报告》中&#xff0c;明确提出了开展“人工智能”行动&#xff0c;显示出政府对AI大模型发展的高度重视和支持。金融行业在AI大模型领域的政策支持和工作进展都呈…

c++的学习之路:25、map与set

摘要 本文中说一下map与set的使用 目录 摘要 一、关联式容器 二、键值对 三、map 1、map的介绍 2、map的使用 1、map的模板参数说明&#xff1a; 2、map的构造 3、map的迭代器 4、map的容量与元素访问 5、map中元素的修改 6、代码使用 ​编辑 三、总结 四、se…

智慧煤矿/智慧矿区视频汇聚存储与安全风险智能分析平台建设思路

一、建设背景 目前我国非常重视煤矿安全生产&#xff0c;并投入大量资金用于煤矿安全综合远程监控系统的研发。视频监控系统作为实现煤矿智能化无人开采的关键系统与煤矿安全生产的多系统协同分析与处理的关键信息源&#xff0c;在智慧矿山管控平台的建设中发挥着重要的作用。…
最新文章