簡體   English   中英

如何比較兩個相似代碼的性能?

[英]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 ,而是測試33以外的一些數字。

有專門為您執行此操作的工具。 jsPerf.com是最著名的之一。 這是我在那里做的測試 但是,即使jsPerf也專注於在合理的時間段(不到一分鍾)內獲得結果,而正確的測試以檢測非常小的差異可能長達數分鍾甚至數小時。

但是=====之間的任何差異都將是如此之小,根本沒有必要進行測試。 幾乎可以肯定,您有更大的魚可以油炸。


¹為什么沒有區別? 因為您要比較的兩件事都是number s,所以比較的作用完全相同。 您可能聽說過=====快的說法是基於==將不同類型的操作數強制轉換為普通類型這一事實。 當不需要強制/轉換時, =====做完全相同的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM