成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

多條件短路優(yōu)化實(shí)測(cè)

jone5679 / 1454人閱讀

摘要:原文地址多條件短路優(yōu)化實(shí)測(cè)什么是多條件短路型如這樣的多個(gè)條件組成的邏輯語(yǔ)句,通過(guò)調(diào)整每個(gè)因子的順序,利用短路來(lái)實(shí)現(xiàn)執(zhí)行效率的優(yōu)化。結(jié)果結(jié)論多個(gè)條件,把大概率的條件寫最前面,效率更高。

原文地址:多條件短路優(yōu)化實(shí)測(cè)

什么是多條件短路

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

通過(guò)調(diào)整每個(gè)因子的順序,利用短路來(lái)實(shí)現(xiàn)執(zhí)行效率的優(yōu)化。

知乎:邏輯運(yùn)算符特有的短路效應(yīng)是什么
口說(shuō)無(wú)憑,真實(shí)場(chǎng)景模擬測(cè)試

首先定義三個(gè)邏輯單元:

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

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

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

顯而易見(jiàn), 以上三個(gè)邏輯, 返回 true的概率是逐漸遞減的。

我們以此來(lái)做實(shí)驗(yàn)樣本。

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 });

以上代碼應(yīng)該比較好懂, 測(cè)試 ||`&&` 兩種情況下,不同的排列順序?qū)?zhí)行效率的影響,

如果實(shí)在思路轉(zhuǎn)不過(guò)來(lái), 多看幾遍代碼。

結(jié)果:
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)

結(jié)論:

多個(gè) || 條件,把大概率true的條件寫最前面,效率更高。

多個(gè) && 條件,把小概率true的條件寫最前面,效率更高。

為什么?

||遇到true就會(huì)短路, 反之, &&遇到false也會(huì)短路。

明白了嗎?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93305.html

相關(guān)文章

  • Java線程——帶你看AQS框架源碼

    摘要:作用是存儲(chǔ)獲取鎖失敗的阻塞線程。獨(dú)占模式下,鎖是線程獨(dú)占的,而共享模式下,鎖是可以被多個(gè)線程占用的。等方法就是讓線程阻塞加入隊(duì)列喚醒線程等。該方法其實(shí)就是自旋嘗試獲取鎖或阻塞線程子類實(shí)現(xiàn)決定。 AQS,全稱AbstractQueuedSynchronizer,是Concurrent包鎖的核心,沒(méi)有AQS就沒(méi)有Java的Concurrent包。它到底是個(gè)什么,我們來(lái)看看源碼的第一段注解是...

    stackvoid 評(píng)論0 收藏0
  • JS 使用短路原理簡(jiǎn)化條件語(yǔ)句代碼

    摘要:首先得介紹下短路原理,一共就以下四點(diǎn)非常關(guān)鍵只要前面為不管后面是還是,都返回后面的值。正常思路也是最簡(jiǎn)單的思路就是條件語(yǔ)句,如下結(jié)束但是代碼看起來(lái)非常的多,雖然方便閱讀,但是不方便裝逼啊使用短路原理大大精簡(jiǎn)條件語(yǔ)句代碼,如下怎么樣,就一行把 首先得介紹下短路原理,一共就以下四點(diǎn)(非常關(guān)鍵): 1、只要||前面為false,不管||后面是true還是false,都返回||后面的值。 2、...

    yuxue 評(píng)論0 收藏0
  • 每日 30 秒 ? 該不該優(yōu)雅

    showImg(https://segmentfault.com/img/remote/1460000018734296?w=900&h=500); 簡(jiǎn)介 可讀性、性能、Spread、Reduce 在 優(yōu)雅三連擊 中有同學(xué)提到了 可讀性 這個(gè)關(guān)鍵詞,就小二個(gè)人的觀點(diǎn) 在某個(gè)范圍內(nèi)使用比較常用到的小技巧,可以提升一定的可讀性,文中提到的短路運(yùn)算在初始化變量是提升可讀性的,并且在很多提倡優(yōu)化if 語(yǔ)句...

    JohnLui 評(píng)論0 收藏0
  • 高性能JavaScript閱讀簡(jiǎn)記(三)

    摘要:移植到中的一個(gè)典型的達(dá)夫設(shè)備的例子為一個(gè)很長(zhǎng)很長(zhǎng)的數(shù)組。但是達(dá)夫設(shè)備最初這種詭異的寫法和思路,還是驚艷了很多人的,值得我們思考。高性能閱讀簡(jiǎn)記一高性能閱讀簡(jiǎn)記二高性能閱讀簡(jiǎn)記三 四、Aligorithms and Flow Control 算法和流程控制 1、Loops 循環(huán) a、避免使用for/in循環(huán)在JavaScript標(biāo)準(zhǔn)中,有四種類型循環(huán)。for、for/in、while、...

    psychola 評(píng)論0 收藏0
  • 高性能JavaScript閱讀簡(jiǎn)記(三)

    摘要:移植到中的一個(gè)典型的達(dá)夫設(shè)備的例子為一個(gè)很長(zhǎng)很長(zhǎng)的數(shù)組。但是達(dá)夫設(shè)備最初這種詭異的寫法和思路,還是驚艷了很多人的,值得我們思考。高性能閱讀簡(jiǎn)記一高性能閱讀簡(jiǎn)記二高性能閱讀簡(jiǎn)記三 四、Aligorithms and Flow Control 算法和流程控制 1、Loops 循環(huán) a、避免使用for/in循環(huán)在JavaScript標(biāo)準(zhǔn)中,有四種類型循環(huán)。for、for/in、while、...

    newsning 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<