摘要:原文地址多條件短路優化實測什么是多條件短路型如這樣的多個條件組成的邏輯語句,通過調整每個因子的順序,利用短路來實現執行效率的優化。結果結論多個條件,把大概率的條件寫最前面,效率更高。
原文地址:多條件短路優化實測
什么是多條件短路型如 if (A && B && C) 這樣的多個條件組成的邏輯語句,
通過調整每個因子的順序,利用短路來實現執行效率的優化。
知乎:邏輯運算符特有的短路效應是什么口說無憑,真實場景模擬測試
首先定義三個邏輯單元:
const conditionA = ()=>{ return Math.random() > 0.25;? } const conditionB = ()=>{ return Math.random() > 0.5; } const conditionC = ()=>{ return Math.random() > 0.75; }
顯而易見, 以上三個邏輯, 返回 true的概率是逐漸遞減的。
我們以此來做實驗樣本。
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 });
以上代碼應該比較好懂, 測試 ||`&&` 兩種情況下,不同的排列順序對執行效率的影響,
如果實在思路轉不過來, 多看幾遍代碼。
結果: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)
結論:
多個 || 條件,把大概率true的條件寫最前面,效率更高。
多個 && 條件,把小概率true的條件寫最前面,效率更高。
為什么?||遇到true就會短路, 反之, &&遇到false也會短路。
明白了嗎?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93305.html
摘要:作用是存儲獲取鎖失敗的阻塞線程。獨占模式下,鎖是線程獨占的,而共享模式下,鎖是可以被多個線程占用的。等方法就是讓線程阻塞加入隊列喚醒線程等。該方法其實就是自旋嘗試獲取鎖或阻塞線程子類實現決定。 AQS,全稱AbstractQueuedSynchronizer,是Concurrent包鎖的核心,沒有AQS就沒有Java的Concurrent包。它到底是個什么,我們來看看源碼的第一段注解是...
摘要:首先得介紹下短路原理,一共就以下四點非常關鍵只要前面為不管后面是還是,都返回后面的值。正常思路也是最簡單的思路就是條件語句,如下結束但是代碼看起來非常的多,雖然方便閱讀,但是不方便裝逼啊使用短路原理大大精簡條件語句代碼,如下怎么樣,就一行把 首先得介紹下短路原理,一共就以下四點(非常關鍵): 1、只要||前面為false,不管||后面是true還是false,都返回||后面的值。 2、...
showImg(https://segmentfault.com/img/remote/1460000018734296?w=900&h=500); 簡介 可讀性、性能、Spread、Reduce 在 優雅三連擊 中有同學提到了 可讀性 這個關鍵詞,就小二個人的觀點 在某個范圍內使用比較常用到的小技巧,可以提升一定的可讀性,文中提到的短路運算在初始化變量是提升可讀性的,并且在很多提倡優化if 語句...
摘要:移植到中的一個典型的達夫設備的例子為一個很長很長的數組。但是達夫設備最初這種詭異的寫法和思路,還是驚艷了很多人的,值得我們思考。高性能閱讀簡記一高性能閱讀簡記二高性能閱讀簡記三 四、Aligorithms and Flow Control 算法和流程控制 1、Loops 循環 a、避免使用for/in循環在JavaScript標準中,有四種類型循環。for、for/in、while、...
摘要:移植到中的一個典型的達夫設備的例子為一個很長很長的數組。但是達夫設備最初這種詭異的寫法和思路,還是驚艷了很多人的,值得我們思考。高性能閱讀簡記一高性能閱讀簡記二高性能閱讀簡記三 四、Aligorithms and Flow Control 算法和流程控制 1、Loops 循環 a、避免使用for/in循環在JavaScript標準中,有四種類型循環。for、for/in、while、...
閱讀 1906·2021-11-22 14:44
閱讀 1672·2021-11-02 14:46
閱讀 3657·2021-10-13 09:40
閱讀 2601·2021-09-07 09:58
閱讀 1586·2021-09-03 10:28
閱讀 1658·2019-08-29 15:30
閱讀 976·2019-08-29 15:28
閱讀 1469·2019-08-26 12:20