如何比较两个类似代码的性能?

时间:2018-12-07 10:32:58

标签: javascript performance

我试图找到一个更快的== 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]) { }
    }
}

enter image description here

1 个答案:

答案 0 :(得分:3)

要找出是否存在显着差异(在这种情况下,没有¹),如果有,那么更快(在这种情况下,两者都没有),您需要再进行很多次迭代,以及更多的测试运行。当测量非常非常小的物体时,您需要大量数据才能使信号上升到高于噪声的水平。

确保您可以在计算机上关闭的所有后台进程都已关闭,然后对每个版本的代码运行数千次迭代,在它们之间交替进行。

我还建议您测试不是特殊情况的东西。比较中的NaN是一种特殊情况:比较总是为假。因此,我将测试NaN和除3之外的一些数字,而不是针对3测试3

有些工具可以帮助您完成此任务。 jsPerf.com是最著名的之一。 Here's a test I did there。但是,即使jsPerf都专注于在合理的时间段(不到一分钟)内获得结果,而正确的测试以检测到很小的差异可能要花费几分钟甚至几小时。

But =====之间的任何差异都将是如此之小,根本没有必要对其进行测试。几乎可以肯定,您有更大的鱼可以油炸。


¹为什么没有区别?因为您要比较的两件事都是number,所以比较的作用完全相同。您可能已经听说=====更快的说法是基于==将不同类型的操作数强制转换为普通类型这一事实。当不需要强制/转换时,=====会做完全相同的事情。