我正在做一些工作涉及的瀏覽器處理的數據的量瘋狂。因此,我試圖優化所有的細節。我不需要任何人告訴我我正在浪費我的時間,或者過早的優化是所有邪惡的根源。哪個布爾更快? <或<=
我只是想知道是否有人能理解JS如何運作會知道是否不低於布爾較小的運行速度比小於等於布爾較小更快。我的意思是,會:
return (i<2? 0:1)
進行解析和運行速度比:
return (i<=1? 0:1)
在這個例子中我們假定我是一個整數。謝謝。
我正在做一些工作涉及的瀏覽器處理的數據的量瘋狂。因此,我試圖優化所有的細節。我不需要任何人告訴我我正在浪費我的時間,或者過早的優化是所有邪惡的根源。哪個布爾更快? <或<=
我只是想知道是否有人能理解JS如何運作會知道是否不低於布爾較小的運行速度比小於等於布爾較小更快。我的意思是,會:
return (i<2? 0:1)
進行解析和運行速度比:
return (i<=1? 0:1)
在這個例子中我們假定我是一個整數。謝謝。
的JavaScript標準desribes需要,以評估將要採取的步驟那些表達。你可以看看ECMAScript 2015 Language Specification,第12.9.3節。
請注意,即使這兩個操作的步驟之間存在細微差異,應用程序中的其他內容也會對性能產生更多影響,而這些操作在JavaScript中無法控制。例如垃圾收集器,即時編譯器的工作......
即使您嘗試在JavaScript中測量時間,這也不會起作用,因爲只是考慮時間戳對性能影響比實際表達式大得多你想測量。此外,您編寫的代碼可能不是真正評估的代碼,因爲在實際運行代碼之前,引擎可能會採用一些預優化。
哇,這是一個很好的答案,非常感謝! –
我已經創建了一個使用performance.now API和console.time API的小提琴這兩個API都表示執行函數/循環需要多少ms的時間。 我覺得主要的區別是結果,性能。現在給出更準確的值,即高達1/1000毫秒。
https://jsfiddle.net/ztacgxf1/
function lessThan(){
var t0 = performance.now();
console.time("lessThan");
for(var i = 0; i < 100000; i++){
if(i < 1000){}
}
console.timeEnd("lessThan");
var t1 = performance.now();
console.log("Perf -- >>" + (t1-t0));
}
function lessThanEq(){
var t0 = performance.now();
console.time("lessThanEq")
for(var i = 0; i < 100000; i++){
if(i <= 999){}
}
console.timeEnd("lessThanEq");
var t1 = performance.now();
console.log("Perf -- >>" + (t1-t0));
}
lessThan()
lessThanEq()
我沒有太大的區別。可能會迭代更多可能會給不同的結果。
希望這有助於你。
我不會將這種微型優化稱爲納米優化。
情況是如此的相似,你就極有可能,你可以期望增益低於測量精度...
(編輯)
如果此代碼進行了優化,生成的彙編代碼將剛剛從JATO JAE改變(在(X86),和它們使用相同的週期數。0,0000%的變化。
如果不是,你可能贏得發動機的select
內一步......
的討厭的事情是它讓你錯過更大的圖像:除非我錯了,你需要一個分支在這裏,如果你擔心時間,你的輸入的統計分佈將影響更多的執行準時。 (但仍不算多...)
所以走一步,比較:
if (i<2)
return 0;
else
return 1;
和:
if (i>=2)
return 1;
else
return 0;
你看到,(100,20,10,1 ,50,10)(1)將更多地分支並且對於(0,1,0,0,20,1),(2)分支更多。
這將會產生更多的差異...這可能很難衡量!
(作爲一個留給讀者的問題,我想知道return +(i>1)
如何編譯,如果有避免分支的技巧...)
(通過我並不反對早期優化的方式,我甚至貼出一些建議在這裏,如果你可能感興趣的:https://gamealchemist.wordpress.com/2016/04/15/writing-efficient-javascript-a-few-tips/)
哈哈,納米優化 –
最有可能沒有區別,但你可以用https://jsperf.com檢查自己 – andlrc
JSPerf已經關閉了近一年。在我的測試中,似乎只是大於更快,但它往往會波動,所以我不完全確定。 –
你應該包括一個測試用例,其中包含一些數字,並說明你的問題不是一個人比另一個人快,而是爲什麼*它的速度更快。 – TankorSmash