随着鸿蒙生态快速发展,越来越多开发者使用ArkTS进行应用开发。但同样是写业务逻辑,为什么有的应用流畅丝滑、启动飞快,有的却卡顿掉帧、启动缓慢?
答案往往藏在代码细节里。今天我们基于鸿蒙官方最新《ArkTS高性能编程》最佳实践,整理出一些可直接落地的优化方法,覆盖变量、属性、计算、数据结构、函数、模块加载六大场景,帮你写出更快、更稳、更省资源的ArkTS代码。
一、变量声明:从源头减少性能损耗
变量怎么写,直接影响运行时开销。
1. 能用const,绝不乱用let
- 明确不变的变量,一律用const声明(包括基础类型与引用类型)
反例
letPRICE = 10000; // 全程不变却用letletclassA: ClassA = newClassA();
正例
constPRICE = 10000;constclassA: ClassA = newClassA();classA.propA = 'Property A'; // 属性可改
2. number类型要“整型归整型,浮点归浮点”
ArkTS编译器会区分int与double,混用会拖慢优化。
- 避免undefined/null初始化number
正例
functioncalAddSum(addNum: number): number {let count = 0; // 明确整型 count += addNum;return count;}
3. 非跨语言场景,别用ESObject
ESObject只用于ArkTS ↔ TS/JS跨语言调用,普通场景用会带来额外跨语言开销。
二、属性访问:少查一次,快一分
高频访问(尤其循环)是性能重灾区。
1. 循环里把不变值“提出来”
局部变量访问速度 >> 全局/类静态属性查找。循环中不变的属性/计算结果,提前缓存为局部常量。
反例
for (let index = 0x8000; index > 0x8; index >>= 1) {// 每次循环都查 Time.INFO / Time.START totalDays += ((Time.INFO[year - Time.START] & index) !== 0) ? 1 : 0;}
正例
const info = Time.INFO[year - Time.START]; // 只查1次for (let index = 0x8000; index > 0x8; index >>= 1) {if ((info & index) !== 0) totalDays++;}
2. 给类属性加访问修饰符
private/protected/public不只是规范,还能提升安全性与运行效率。
三、数值计算:TypedArray比普通Array快一大截
纯数值计算(图像处理、加解密、大数据运算)优先用TypedArray。
- 基于ArrayBuffer,二进制存储,无额外封装开销
反例
const array1 = new Array(1, 2, 3);const array2 = new Array(4, 5, 6);
正例
const typedArray1 = new Int8Array([1, 2, 3]);const typedArray2 = new Int8Array([4, 5, 6]);
四、数据结构:选对容器,少走弯路
1. 键值读写别用Record,用HashMap
频繁set/get场景,HashMap远快于普通对象。
正例
importHashMapfrom'@ohos.util.HashMap';letinfo: HashMap<string, string> = newHashMap();info.set('aaa','aaa');let val = info.get('bbb');
2. 严禁写出“稀疏数组”
- 不要跳过大量下标直接赋值(如arr[9999] = 0)超过1024且空洞多,虚拟机自动转哈希表存储,访问速度暴跌。
五、函数与闭包:参数传递优于外部引用
尽量用参数传值,少用闭包抓外部变量
反例
const arr = [0,1,2];functionfoo() { arr[0] = 1; // 直接抓外部变量return arr[0]+arr[1];}
正例
functionfoo(array: number[]): number { array[0] = 1;return array[0]+array[1];}foo(arr);
六、导入导出:别让模块加载拖慢启动
冷启动慢,很多时候是import/export写得太乱。
1. 拒绝嵌套export *
多层export *会让依赖解析变成深度遍历,耗时爆炸。
反例Numbers → Utils → SecondPage → Index 层层export *
正例Index直接:
import { One } from'./Numbers';
2. 禁止无脑import *
只导入你用到的变量/函数,不要全量引入。
反例
import * as nm from'../utils/Numbers';
正例
import { One } from'../utils/Numbers';
七、启动加速神器:Lazy‑Import延迟加载
应用越大,冷启动越慢,因为启动时加载了大量暂时不用的文件。官方给出零改逻辑、只加一个关键字的优化方案:lazy。
Lazy-Import怎么写?
import lazy { A } from"./A"; // 只加lazy
效果
与动态import简单对比
注意:不要盲目全量lazy,先通过官方冗余文件检测工具,找出冷启动未使用的文件再优化。
总结:一套高性能ArkTS编码口诀
- 数值计算TypedArray,键值用HashMap
想让你的鸿蒙应用启动更快、运行更稳、占用更低,从今天开始,把这些规则应用到你项目的的SKILL.md里吧。