javascript - 如何比较两段相似代码的性能?

标签 javascript performance

我试图找到一个更快的方法,== 或===。 我对答案不感兴趣,我想知道如何测试它。

我创建了一个代码来测量,但两者之间的差异非常接近,所以我无法证明答案。

我更改了 CPU 速度,并运行此代码。但每次都显示出不同的值(value)。仍不确定哪一个更快。

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

最佳答案

要找出是否存在任何显着差异(在本例中没有显着差异),如果有,哪种更快(在本例中两者都没有),您需要更多迭代,以及更多的测试运行。当测量非常非常小的东西时,您需要大量数据才能使信号高于噪声。

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

我还建议测试一些不是特殊情况的东西。比较中的 NaN 是一种特殊情况:比较始终为 false。因此,我不会针对 3 测试 NaN,而是测试 33 以外的一些数字。

有一些工具可以帮助您执行此操作。最著名的网站之一是 jsPerf.com。 Here's a test I did there 。但即使 jsPerf 也专注于在合理的时间段(不到一分钟)内获得结果,而检测非常小的差异的适当测试很可能需要几分钟甚至几小时。

但是:===== 之间的任何差异都非常小,没有任何差异完全测试它的点。几乎肯定你还有更大的鱼要煎。

<小时/>

为何没有区别?因为您要比较的两个东西都是 number,所以比较的作用完全相同。您可能听说过 ===== 更快的说法根源于 == 强制/转换不同的操作数类型转换为通用类型。当不需要强制/转换时,===== 会做完全相同的事情。

关于javascript - 如何比较两段相似代码的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53667726/

相关文章:

javascript - D3 网格中的力模拟

javascript - Uncaught ReferenceError : Promise is not defined

c - 循环计数器和指针

algorithm - 如何尽可能快地进行矩阵计算

javascript - 如何向 GWT 中的 Web 应用程序添加对插件的支持?

javascript - Chrome App API 中 webview 标签的分区属性是什么?

javascript - 改变每个实例的颜色

javascript - 关于动力学层的问题

c - 使用 SSE : horizontal add and dot product - what's the point? 的高效 4x4 矩阵 vector 乘法

c# - C#中数组什么时候进行补零操作?