当前位置: 首页 > news >正文

HarmonyOS(60)性能优化之状态管理最佳实践

状态管理最佳实践

  • 1、避免在循环中访问状态变量
    • 1.1 反例
    • 1.2 正例
  • 2、避免不必要的状态变量的使用
  • 3、建议使用临时变量替换状态变量
    • 3.1 反例
    • 3.2 正例
  • 4、参考资料

1、避免在循环中访问状态变量

在应用开发中,应避免在循环逻辑中频繁读取状态变量,而是应该放在循环外面读取

1.1 反例

@Entry
@Component
struct Index {@State message: string = '';build() {Column() {Button('点击打印日志').onClick(() => {for (let i = 0; i < 10; i++) {//循环体中使用messagehilog.info(0x0000, 'TAG', '%{public}s', this.message);}}).width('90%').backgroundColor(Color.Blue).fontColor(Color.White).margin({top: 10})}}
}

1.2 正例

将上述代码改成如下,在for循环外部定义一个局部变量,然后在for循环内部使用该变量。

@Entry
@Component
struct Index {@State message: string = '';build() {Column() {Button('点击打印日志').onClick(() => {//循环体外提前访问message变量let logMessage: string = this.message;for (let i = 0; i < 10; i++) {hilog.info(0x0000, 'TAG', '%{public}s', logMessage);}}).width('90%').backgroundColor(Color.Blue).fontColor(Color.White).margin({top: 10})}}
}

2、避免不必要的状态变量的使用

  • 没有关联任何UI组件的状态变量不应该定义为状态变量,否则读写状态变量都会影响性能。
  • 仅有读取操作,没有修改过,没有修改过的状态变量不应该定义为状态变量,否则读状态变量会影响性能。

总之没有关联任何UI组件的状态变量和没有修改过的状态变量不应该定义为状态变量,直接使用一般变量即可,否则会影响性能。

3、建议使用临时变量替换状态变量

状态变量发生变化时,ArkUI会查询依赖该状态变量的组件并执行依赖该状态变量的组件的更新方法,完成组件渲染的行为。通过使用临时变量的计算代替直接操作状态变量,可以使ArkUI仅在最后一次状态变量变更时查询并渲染组件,减少不必要的行为,从而提高应用性能。

3.1 反例

 @State message: string = '';appendMsg(newMsg: string) {//直接操作状态变量,效率不高this.message += newMsg;this.message += ';';this.message += '<br/>';}

3.2 正例

 @State message: string = '';appendMsg(newMsg: string) {//创建一个临时变量,代替直接使用状态变量let message = this.message;message += newMsg;message += ';';message += '<br/>';this.message = message;}

4、参考资料

状态管理最佳实践
HarmonyOS(35) @State使用注意事项

http://www.lryc.cn/news/495341.html

相关文章:

  • 数据库课程设计报告 超市会员管理系统
  • C++算法练习-day54——39.组合总和
  • 计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
  • Linux的文件系统
  • 【Vue3】从零开始创建一个VUE项目
  • 9)语法分析:半倒装和全倒装
  • Scala关于成绩的常规操作
  • 使用Java实现度分秒坐标转十进制度的实践
  • 根据后台数据结构,构建搜索目录树
  • 食品计算—FoodSAM: Any Food Segmentation
  • 2411rust,1.83
  • tomcat加载三方包顺序
  • 计算机的错误计算(一百七十一)
  • js对于json的序列化、反序列化有哪几种方法
  • Linux——基础命令(2) 文件内容操作
  • 简单搭建qiankun的主应用和子应用并且用Docker进行服务器部署
  • Python知识分享第十六天
  • 管家婆财贸ERP BR045.大类存货库存数量明细表
  • Pytorch-GPU版本离线安装
  • k8s 1.28 二进制安装与部署
  • 【C语言】扫雷游戏(一)
  • 二分法篇——于上下边界的扭转压缩间,窥见正解辉映之光(1)
  • # 01_Python基础到实战一飞冲天(三)--python面向对象(一)--简单类
  • sentinel使用手册
  • 搜索二维矩阵 II(java)
  • Python语法基础(四)
  • 03_Django视图
  • 如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件
  • 11 设计模式之代理模式(送资料案例)
  • MongoDB聚合操作