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

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

let doubleNum = 1.1;
doubleNum = 1;  // 該變量在聲明時(shí)為浮點(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ù)字計(jì)算場景辆童,推薦使用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'];
異常
  • 避免頻繁拋出異常,因?yàn)閯?chuàng)建異常時(shí)回構(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)系作者
  • 序言:七十年代末故黑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子纸镊,更是在濱河造成了極大的恐慌倍阐,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逗威,死亡現(xiàn)場離奇詭異峰搪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)凯旭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門概耻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來使套,“玉大人,你說我怎么就攤上這事鞠柄≌旄撸” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵厌杜,是天一觀的道長奉呛。 經(jīng)常有香客問我,道長夯尽,這世上最難降的妖魔是什么瞧壮? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮匙握,結(jié)果婚禮上咆槽,老公的妹妹穿的比我還像新娘。我一直安慰自己圈纺,他們只是感情好秦忿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛾娶,像睡著了一般灯谣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茫叭,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天酬屉,我揣著相機(jī)與錄音,去河邊找鬼揍愁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛杀饵,可吹牛的內(nèi)容都是我干的莽囤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼切距,長吁一口氣:“原來是場噩夢啊……” “哼朽缎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谜悟,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤话肖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后葡幸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體最筒,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年蔚叨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了床蜘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辙培。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邢锯,靈堂內(nèi)的尸體忽然破棺而出扬蕊,到底是詐尸還是另有隱情,我是刑警寧澤丹擎,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布尾抑,位于F島的核電站,受9級(jí)特大地震影響蒂培,放射性物質(zhì)發(fā)生泄漏蛮穿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一毁渗、第九天 我趴在偏房一處隱蔽的房頂上張望践磅。 院中可真熱鬧,春花似錦灸异、人聲如沸府适。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檐春。三九已至,卻和暖如春么伯,著一層夾襖步出監(jiān)牢的瞬間疟暖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工田柔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俐巴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓硬爆,卻偏偏與公主長得像欣舵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子缀磕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容