如何在 benchmark.js 中提高个别测试的准确性

How to improve accuracy for individual tests in benchmark.js

我有这个 jsfiddle,我正在尝试测量我感兴趣的某些操作的性能,并且我不断地获得不同的个别测试准确度。例如,这是我的最后一个 运行:

using extra assign x 662 ops/sec ±9.20% (57 runs sampled)
using no extra assign x 694 ops/sec ±4.31% (47 runs sampled)
Fastest run(s) is(are): "using no extra assign,using extra assign"

很难测量具有不同精度的结果,在某些情况下可能高达 ±30.0%,因此我希望能够设置可接受的精度边界。

我试图调整选项,但它们似乎没有影响任何东西,或者我做错了什么。我做错了什么?

提前致谢!

minSamples 选项添加到每个基准并将其设置为更高级别将强制 benchmark.js 为每个基准采集更多样本。拥有更大的样本集应该会降低误差幅度 (MOE)。尝试使用样本量来确定准确性和测试持续时间之间的理想平衡。

这是一个使用您在 jsfiddle 中提供的代码的示例:

suite
.add('using extra assign', test1, { minSamples: 200 })
.add('using no extra assign', test2, { minSamples: 200 })

根据这些更改,产生了以下结果:

using extra assign x 642 ops/sec ±0.74% (240 runs sampled)
using no extra assign x 637 ops/sec ±0.44% (258 runs sampled)
Fastest run(s) is(are): "using extra assign"

如果您在基准测试为 运行ning 时使用计算机做其他事情,您将获得高水平的方差。要看到这一点,运行 基准测试两次:第一次,在 运行 浏览网页时,拖动 GUI windows,编译一些代码。第二次,关闭任何使用大量 CPU 周期的应用程序,启动基准测试,然后关闭计算机直到完成。你会看到巨大的不同。

另一件事是启动具有更高优先级的基准测试。在基于 Unix/Linux= 的机器上使用 nice。例如在我的 macOS 机器上我 运行:

nice -10 node comparativeBench.js