Javascript 如何测量Node.JS中JS代码执行的CPU时间以进行基准测试?

Javascript 如何测量Node.JS中JS代码执行的CPU时间以进行基准测试?,javascript,node.js,cpu-usage,microbenchmark,Javascript,Node.js,Cpu Usage,Microbenchmark,我有一个函数可以对任意JS函数调用进行简单的性能基准测试,如下所示: function benchmark(f) { var startTime = Date.now(); f(); var endTime = Date.now(); console.log('Elapsed: %d ms', endTime - startTime); } 我用它测试的函数通常需要2-5秒才能执行,因此计算到Date.now()的一个完整调用的开销可以忽略不计 尽管如此,根据我的机器上

我有一个函数可以对任意JS函数调用进行简单的性能基准测试,如下所示:

function benchmark(f) {
   var startTime = Date.now();
   f();
   var endTime = Date.now();
   console.log('Elapsed: %d ms', endTime - startTime);
}
我用它测试的函数通常需要2-5秒才能执行,因此计算到Date.now()的一个完整调用的开销可以忽略不计


尽管如此,根据我的机器上运行的其他进程的不同,基准时间差异很大,因此即使我多次运行基准并取最小值,即使机器“大部分”处于空闲状态,我仍然可以看到连续(组)运行之间20-50%的变化。这使得很难看到策略的性能变化,我想策略可能取决于这些函数的功能。如果它们只是闲置一段时间,您可以模拟计时器并使它们同步。并且非常适合JS基准测试。尽管如此,根据我的机器上运行的其他进程的不同,基准时间有很大的差异——听起来不太好。如果您的流程确实会影响基准测试结果,那么这是毫无意义的。如果可以,请关闭它们。为什么不使用console.time('function f')f()console.timeEnd('function f')来获得执行time@BittuS因为这和OP当前的代码有着完全相同的问题。它不测量CPU时间。@estus:我正在进行基准测试的代码是100%同步的,没有I/O,所以永远不要空闲。它也是确定性的,因此在不更改代码的情况下连续运行应该使用几乎恒定的CPU时间。我可以使用
time node benchmark.js
获取经过的CPU时间,但我不想计算启动/设置时间。后台进程包括我的编辑器、web浏览器、macOS系统进程等,所有这些进程在进行开发时都是不可避免的,但平均CPU数很少超过0.25。在没有超线程的情况下,节点所用的CPU时间应该对争用不敏感。如果您认为编辑器和web浏览器可能有影响,则显然可以退出它们。允许获得具有统计意义的结果。