我有一个函数可以执行任意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%连续(组)运行 - 即使机器“大部分”空闲。这使得很难看到性能变化<5%。
我最终不得不观察Activity Monitor并等到系统看起来(大部分)空闲,然后希望在运行过程中没有其他任何东西启动。相反,我想修改基准来测量经过的CPU时间而不是经过的时间。这应该使它对I / O被阻塞并且对CPU争用的敏感度大大不敏感(虽然不敏感:由于超线程,我期望如果可运行线程的数量超过物理CPU核心的数量,那么表现性能当超线程争用实际硬件时会减少。)
如何从Node中查询node
进程的CPU时间?