高性能的 JavaScript -- 流程控制

高性能的 JavaScript -- 流程控制

If-ElseSwitch 語句

// 第一種狀況
if (x === 0) {
  console.log(0);
} else if (x === 1) {
  console.log(1);
}

switch (x) {
  case 0:
    console.log(0);
    break;
  case 1:
    console.log(1);
    break;
}

// 第二種狀況
if (x === 0) {
  console.log(0);
} else if (x === 1) {
  console.log(1);
} else if (x === 2) {
  console.log(2);
} else if (x === 3) {
  console.log(3);
} else if (x === 4) {
  console.log(4);
} else if (x === 5) {
  console.log(5);
} else if (x === 6) {
  console.log(6);
} else if (x === 7) {
  console.log(7);
} else if (x === 8) {
  console.log(8);
} else if (x === 9) {
  console.log(9);
}

switch (x) {
  case 0:
    console.log(0);
    break;
  case 1:
    console.log(1);
    break;
  case 2:
    console.log(2);
    break;
  case 3:
    console.log(3);
    break;
  case 4:
    console.log(4);
    break;
  case 5:
    console.log(5);
    break;
  case 6:
    console.log(6);
    break;
  case 7:
    console.log(7);
    break;
  case 8:
    console.log(8);
    break;
  case 9:
    console.log(9);
    break;
}

咱們來看上面兩個例子大多數的人都覺的 if 語句在條件較少的時候要比 switch 清晰,若是條件較多那麼就是使用
switch 更加清晰明瞭,事實上 switch 語句較 if 語句相比較具備更高的效率。固然這種效率性能的提高只能在分支
條件較多較爲複雜的時候體現出來,這與咱們的直覺同樣 條件較多的時候使用 switch 語句javascript

優化 If-Else 語句

另一種減小條件判斷數量的方法是將 if-else 組織成一系列嵌套的 if-else 表達式。使用一個單獨的一長
串的 if-else 一般致使運行緩慢,由於每一個條件體都要被計算。java

if (x < 3) {
  if (x === 0) {}
  else if (x === 1) {}
  else if (x === 2) {}
} else if (x < 6) {
  if (x === 3) {}
  else if (x === 4) {}
  else if (x === 5) {}
} else if (x < 9) {
  if (x === 6) {}
  else if (x === 7) {}
  else if (x === 8) {}
}

在重寫的 if-else 表達式中,每次抵達正確分支時最多經過四個條件判斷。它使用二分搜索法將值域分紅
了一系列區間,而後逐步縮小範圍。當數值範圍分佈在 0 到 9 時,此代碼的平均運行時間大約是前面那
個版的一半。此方法適用於須要測試大量數值的狀況 (相對離散值來講 switch 語句更合適)。數組

表查法

有些狀況下要避免使用 if-elseswitch。當有大量離散值須要測試時,if-elseswitch 都比使用查表法
要慢得多。在 JavaScript 中查表法可以使用數組或者普通對象實現,查表法訪問數據比 if-else 或者 switch 更快,
特別當條件體的數目很大時。性能

let map = [1, 2, 3, 4, 5, 6, 7, 8, 9];

console.log(map[x]);
相關文章
相關標籤/搜索