多條件短路優化實測

原文地址:多條件短路優化實測dom

什麼是多條件短路

型如 if (A && B && C) 這樣的多個條件組成的邏輯語句,async

經過調整每一個因子的順序,利用短路來實現執行效率的優化。測試

知乎:邏輯運算符特有的短路效應是什麼

口說無憑,真實場景模擬測試

首先定義三個邏輯單元:優化

const conditionA = ()=>{
  return Math.random() > 0.25;å
}

const conditionB = ()=>{
  return Math.random() > 0.5;
}

const conditionC = ()=>{
  return Math.random() > 0.75;
}

顯而易見, 以上三個邏輯, 返回 true的機率是逐漸遞減的。ui

咱們以此來作實驗樣本。this

const Benchmark = require('benchmark');
const suite = new Benchmark.Suite;

suite.add('A || B || C', function () {
  if(conditionA() || conditionB() || conditionC()){
    // A或B或C, 大機率true的放前面
  }
}).add('C || B || A', function () {
  if(conditionC() || conditionB() || conditionA()){
    // C或B或A, 小几率true的放前面
  }
}).add('A && B && C', function () {
  if(conditionA() && conditionB() && conditionC()){
    // A且B且C, 大機率true的放前面
  }
}).add('C && B && A', function () {
  if(conditionC() && conditionB() && conditionA()){
    //C且B且A, 小几率true的放前面
  }
}).on('cycle', function (event) {
  console.log(String(event.target));
}).on('complete', function () {
  console.log('Fastest is ' + this.filter('fastest').map('name'));
}).run({ 'async': true });

以上代碼應該比較好懂, 測試 ||`&&` 兩種狀況下,不一樣的排列順序對執行效率的影響,code

若是實在思路轉不過來, 多看幾遍代碼。get

結果:

A || B || C x 29,734,965 ops/sec ±1.42% (88 runs sampled)

C || B || A x 19,663,159 ops/sec ±0.57% (90 runs sampled)

A && B && C x 19,865,675 ops/sec ±0.63% (89 runs sampled)

C && B && A x 30,679,108 ops/sec ±0.52% (88 runs sampled)

結論:it

  • 多個 || 條件,把大機率true的條件寫最前面,效率更高。
  • 多個 && 條件,把小几率true的條件寫最前面,效率更高。

爲何?

||遇到true就會短路, 反之, &&遇到false也會短路。io

明白了嗎?

相關文章
相關標籤/搜索