ArkTS高性能編程實(shí)踐

聲明與表達(dá)式
  • 不變的變量使用const申明
const index = 1
  • number類型變量避免整型和浮點(diǎn)型混用
let intNum = 1;
intNum = 1.1;  // 該變量在聲明時為整型數(shù)據(jù),建議后續(xù)不要賦值浮點(diǎn)型數(shù)據(jù)

let doubleNum = 1.1;
doubleNum = 1;  // 該變量在聲明時為浮點(diǎn)型數(shù)據(jù),建議后續(xù)不要賦值整型數(shù)據(jù)
  • 循環(huán)中常量提取,減少屬性的訪問次數(shù)
class Time {
  static start: number = 0;
  static info: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
}

function getNum(num: number): number {
  let total: number = 348;
  const info = Time.info[num - Time.start];  // 從循環(huán)中提取不變量
  for (let index: number = 0x8000; index > 0x8; index >>= 1) {
    if ((info & index) != 0) {
      total++;
    }
  }
  return total;
}
函數(shù)
  • 建議使用參數(shù)傳遞函數(shù)外的變量
let arr = [0, 1, 2];

function foo(array: number[]): number {
  return array[0] + array[1];
}

foo(arr);
  • 避免使用可選參數(shù),可選參數(shù)可為undefined,函數(shù)內(nèi)部使用該參數(shù),需要進(jìn)行非空值的判斷,造成額外開銷,可以考慮默認(rèn)參數(shù)
// 可選參數(shù)
function add(left?: number, right?: number): number | undefined {
  if (left != undefined && right != undefined) {
    return left + right;
  }
  return undefined;
}

// 默認(rèn)參數(shù)
function add(left: number = 0, right: number = 0): number {
  return left + right;
}

數(shù)組
  • 如果涉及純數(shù)字計算場景,推薦使用TypedArray數(shù)據(jù)結(jié)構(gòu)
const typedArray1 = new Int8Array([1, 2, 3]);
const typedArray2 = new Int8Array([4, 5, 6]);
let res = new Int8Array(3);
for (let i = 0; i < 3; i++) {
  res[i] = typedArray1[i] + typedArray2[i];
}
  • 避免使用聯(lián)合類型數(shù)據(jù)的數(shù)組,將相同類型的數(shù)據(jù)放置在同一數(shù)組中
// 優(yōu)化前
let arrNum: number[] = [1, 1.1, 2];  // 數(shù)值數(shù)組中混合使用整型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)
let arrUnion: (number | string)[] = [1, 'hello'];  // 聯(lián)合類型數(shù)組

// 優(yōu)化后
let arrInt: number[] = [1, 2, 3];
let arrDouble: number[] = [0.1, 0.2, 0.3];
let arrString: string[] = ['hello', 'world'];
異常
  • 避免頻繁拋出異常,因為創(chuàng)建異常時回構(gòu)造異常的棧幀,造成性能的損耗
// 優(yōu)化前
function div(a: number, b: number): number {
  if (a <= 0 || b <= 0) {
    throw new Error('Invalid numbers.')
  }
  return a / b
}

function sum(num: number): number {
  let sum = 0
  try {
    for (let t = 1; t < 100; t++) {
      sum += div(t, num)
    }
  } catch (e) {
    console.log(e.message)
  }
  return sum
}
// 優(yōu)化后
function div(a: number, b: number): number {
  if (a <= 0 || b <= 0) {
    return NaN
  }
  return a / b
}

function sum(num: number): number {
  let sum = 0
  for (let t = 1; t < 100; t++) {
    if (t <= 0 || num <= 0) {
      console.log('Invalid numbers.')
    }
    sum += div(t, num)
  }
  return sum
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容