HarmonyOS NEXT(开发进阶)ArkTS高性能编程

鸿蒙NEXT开发实战往期必看文章:

一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发!

“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)

HarmonyOS NEXT应用开发案例实践总结合(持续更新......)

HarmonyOS NEXT应用开发性能优化实践总结(持续更新......)


rkTS高性能编程概述

高性能编程指的是在语法使用过程中,通过优化一些影响性能的代码片段,使代码以最优的方式执行。以下实践是在开发过程中逐步总结出来的一些高性能的写法和建议,实践包含变量声明、属性的访问、数值计算、数据结构的使用以及函数声明与使用等内容,在业务功能实现过程中,要同步思考并理解高性能写法的原理,运用到代码逻辑实现中。

变量声明

使用const声明常量

对于初期明确不会改变的变量,尽量使用const进行初始化,这里的常量包含基础类型和引用类型。通过const保证地址不会发生变化,能够极大减少由于编码时误操作导致的赋值等行为,造成对原有逻辑的改变,声明为const能够在编辑时及时发现错误。其中当const声明的是引用类型时,引用类型内部的属性变化是允许的,对于这种不存在地址变化的情况下,也建议使用const声明。

【反例】

// 该变量在后续过程并未发生改变,建议声明为常量
let PRICE = 10000;

function getPrice() {
  return PRICE;
}

class ClassA {
  propA: string = 'propA'
} 
// 该引用类型的变量在后续过程变量地址并未发生改变,仅修改了变量的属性,本例中的let建议改为const
let classA: ClassA = new ClassA();
classA.propA = 'Property A';

【正例】

const PRICE = 10000; // 常量声明为基础类型时,其内容不可改变

function getPrice() {
  return PRICE;
}

class ClassA {
  propA: string = 'propA'
}

// 常量声明为引用类型时,其地址不可改变,但可以改变属性
const classA: ClassA = new ClassA();
classA.propA = 'Property A';

指定number的类型

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

【正例】

function calAddSum(addNum: number): number {
  // count预期是int,不要声明成undefined/null或0.0,直接初始化为0
  let count = 0;
  count += addNum;
  return count;
}

减少使用ESObject

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

【反例】

// lib.ets
interface TestA {
  sum: number
}

export function getObject(value: number): TestA {
  let obj: TestA = { sum: value };
  return obj;
}

// app.ets
import { getObject } from 'lib';
let obj:ESObject = getObject(123); // 通过ESObject定义接受类型

【正例】

1、在lib

你可能感兴趣的:(鸿蒙开发,OpenHarmony,HarmonyOS,harmonyos,华为,鸿蒙,android,前端,ui)