[英]How do I compare the performance of two similar bits of code?
我試圖找到一個更快, == or ===
。 我對答案不感興趣,我想知道如何測試。
我創建了一個要測量的代碼,但是兩者之間的差異是如此之近,所以我無法證明答案。
我更改了CPU速度,然后運行此代碼。 但是每次都顯示出不同的價值。 仍然不確定哪一個更快。
let B = new Array(1000000).fill(3);
console.time("teste 2 ");
test2(B);
console.timeEnd("teste 2 ");
console.time("teste 3 ");
test3(B);
console.timeEnd("teste 3 ");
function test2(B) {
for (i in B) {
if (NaN == B[i]) { }
}
}
function test3(B) {
for (i in B) {
if (NaN === B[i]) { }
}
}
要了解是否有任何顯著的差異(沒有的話,在這個case¹)如果是這樣,這是更快(既不在這種情況下),你需要更多的迭代,和更大量的測試運行。 當測量非常非常小的物體時,您需要大量數據才能使信號上升到高於噪聲的水平。
確保關閉您可以在計算機上關閉的所有后台進程,然后依次運行每個版本的代碼的數千次迭代,並在它們之間交替進行。
我還建議測試不是特殊情況的東西。 比較中的NaN
是一種特殊情況:比較始終為假。 因此,我不是測試3
NaN
,而是測試3
和3
以外的一些數字。
有專門為您執行此操作的工具。 jsPerf.com是最著名的之一。 這是我在那里做的測試 。 但是,即使jsPerf也專注於在合理的時間段(不到一分鍾)內獲得結果,而正確的測試以檢測非常小的差異可能長達數分鍾甚至數小時。
但是 : ==
和===
之間的任何差異都將是如此之小,根本沒有必要進行測試。 幾乎可以肯定,您有更大的魚可以油炸。
¹為什么沒有區別? 因為您要比較的兩件事都是number
s,所以比較的作用完全相同。 您可能聽說過===
比==
快的說法是基於==
將不同類型的操作數強制轉換為普通類型這一事實。 當不需要強制/轉換時, ==
和===
做完全相同的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.