Harmony Next性能优化之ArkTS

一、ArkTS高性能编程

变量声明

1、使用const声明常量

对于初期明确不会改变的变量,尽量使用const进行初始化,这里的常量包含基础类型和引用类型。通过const保证地址不会发生变化,能够极大减少由于编码时误操作导致的赋值等行为,造成对原有逻辑的改变,声明为const能够在编辑时及时发现错误。

2、指定number的类型

对于number类型,编译器在优化时会区分int和double类型。开发者在初始化number类型的变量时,如果预期是整数类型就初始化为0,小数类型就初始化为0.0,避免将一个number类型初始化为undefined或者null。

3、减少使用ESObject

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

属性访问

1、减少变量的属性查找

在要求性能的场景下,建议通过使用将全局变量存储为局部变量的方式来减少全局查找,因为访问局部变量的速度要比访问全局变量的速度更快。重复的访问同一个变量,将造成不必要的消耗,尤其当类似的访问出现在循环过程中,其对于性能的影响更大。

2、给类属性添加访问修饰符

在ArkTS中,对于类结构的属性提供了private、protected和public可访问修饰符。默认情况下一个属性的可访问修饰符为public。选取适当的可访问修饰符可以提升代码的安全性、可读性。

数值计算

1、数值计算使用TypedArray

如果是纯数值计算的场合,推荐使用TypedArray数据结构。TypedArray类型化数组是一种类似数组的对象,其提供了一种用于在内存缓冲中访问原始二进制数据的机制。在一些图像数据处理、加解密的数据计算过程中使用TypedArray可以提高数据处理的效率,因为TypedArray是基于ArrayBuffer实现,在性能方面也能够进行较大提升。

数据结构的使用

1、选取合适的数据结构

有些时候会采用Record的方式作为临时容器来处理属性存取的逻辑,例如如下案例中,对于info执行的操作是set存储以及读取的操作,这里更好的方式是采用标准内置Map以及基础类库提供的高性能容器类如HashMap。HashMap是ArkTS提供的高性能容器类,底层使用红黑树实现,提供了高性能的数据读写操作,可以用来实现快速读写键值。

2、避免造成稀疏数组

分配数组时,需要避免使用如下的方式进行处理。当虚拟机在分配大小超过1024大小的数组时,会变成用哈希表来存储元素,相对数组用偏移来访问元素速度较慢,在开发时,尽量避免数组变成稀疏数组。

函数声明与使用

1、函数内部变量尽量使用参数传递

能传递参数的尽量传递参数,不要使用闭包,闭包作为参数会多一次闭包的创建和访问。在普通函数中,修改外部作用域的变量时,建议通过函数的参数传递,因为在直接声明时引用外部作用域的变量,如果没有及时清理,可能有内存泄漏的风险。ArkTS中函数参数是引用类型时,作用于引用类型的修改会进行引用传递,函数内对形参的修改也会作用在实参上。

减少使用嵌套export */import *的方式

1、减少使用嵌套export *的方式全量导出

由于依赖模块解析采用深度优先遍历的方式来遍历模块依赖关系图中每一个模块记录,会先从入口文件的第一个导入语句开始一层层往更深层查找,直到最后一个没有导入语句的模块为止,连接好这个模块的导出变量之后又会回到上一级的模块重复这个步骤,因此多层export *的使用会导致依赖模块解析、文件执行阶段耗时增长。

2、减少import *的方式全量引用

应用程序加载过程中,需要使用不同模块中的变量或函数,通常开发者会将相同类型的变量或函数放在同一个工具类文件中,使用时通过import的方式引入对应的模块,当工具类中存在较多暴露函数或变量时,推荐按需引用使用到的变量代替“import *”的方式,可以减少该阶段中.ets文件执行耗时,即减少文件中所有export变量的初始化过程。

二、AOT性能优化

在未启用AOT时,源代码在IDE侧通过编译得到字节码,并且打包成可被安装的可执行文件,在应用运行时,运行时会将字节码解释为机器可执行的机器码。在这个期间,如果有热点代码被反复的执行,那么会增加解释执行的成本,造成性能开销。

采用AOT编译的方式,首先需要在IDE侧,通过hdc或者IDE直接执行相应指令,生成记录运行时信息的ap文件,然后在安装时将ap文件提供给AOT编译器。开启AOT后,在设备侧运行时会执行AOT编译,对ap文件中保存的执行信息(热点函数,分支语句、运行时变量的类型信息等)进行编译优化,生成高性能的机器码,在程序解释执行时,对于热点函数执行时,将直接执行优化后的机器码,便能够极大提升执行效率。

更多详情请查看:文档中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值