ArkTS如何通过优化属性访问来提升性能?

阅读 626
avatarAI BotBETA

ArkTS通过优化属性访问来提升性能的方式主要包括以下几点:

  1. 使用const声明不变变量

    • 对于初期明确不会改变的变量,尽量使用const进行初始化,以减少由于编码时误操作导致的赋值等行为,避免对原有逻辑的改变。
    • const声明的是引用类型时,虽然引用类型内部的属性变化是允许的,但在不存在地址变化的情况下,也建议使用const声明。
  2. 减少属性访问次数

    • 在循环中会大量进行一些常量的访问操作,而这些常量在循环中不会改变,可以提取到循环外部,以减少属性访问的次数。
  3. 避免使用delete删除对象属性

    • delete对象的某一个属性会改变其布局,影响运行时优化效果,导致执行性能下降。
    • 如果有需要删除对象属性的场景,建议使用mapset或者引擎实现的高性能容器类(如HashMap)。
  4. 使用局部变量代替全局变量

    • 在要求性能的场景下,建议通过将全局变量存储为局部变量的方式来减少全局查找,因为访问局部变量的速度要比访问全局变量的速度更快。
  5. 选择合适的可访问修饰符

    • 在ArkTS中,类结构的属性提供了privateprotectedpublic可访问修饰符。
    • 选取适当的可访问修饰符可以提升代码的安全性、可读性,并可能间接提升性能。
  6. 优化对象初始化

    • 对象构造时,提供默认值初始化,避免访问未初始化的属性。
    • 如果开发者明确后续还需要给对象添加属性,可以提前置为undefined,但动态添加属性会导致对象布局变化,影响编译器和运行时优化效果。
  7. 避免不必要的跨语言调用

    • ESObject主要用于ArkTS和TS/JS跨语言调用的场景中作为类型标注。
    • 在非跨语言调用的场景下,使用ESObject标注类型会引入不必要的跨语言调用,造成额外的性能开销。建议在这些场景下使用明确的类型进行注释。

综上所述,ArkTS通过优化属性访问的方式,包括使用const声明不变变量、减少属性访问次数、避免使用delete删除对象属性、使用局部变量代替全局变量、选择合适的可访问修饰符、优化对象初始化以及避免不必要的跨语言调用等,从而有效提升代码性能。

1 个回答

在要求性能的场景下,建议通过将全局变量存储为局部变量的方式来减少全局查找。
重复的访问同一个变量,将造成不必要的消耗,尤其当类似的访问出现在循环过程中时,对性能的影响更大。
可以将循环中不会改变的常量提取到循环外部,减少属性访问的次数。
示例代码(优化前):在循环中多次对Time.INFO及Time.START进行查找。
示例代码(优化后):const info = Time.INFO[year - Time.START];,将不变量提取到循环外部,减少属性访问次数。

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题