如何在独立的javascript程序中计算运行时速度?

时间:2013-02-20 16:38:20

标签: javascript performance

我正在做一些JavaScript练习并思考如何将我的解决方案(算法)改进为the exercise。我正在考虑在调整代码后计算运行时速度,这样我就知道速度有多大提高了。我搜索并找到this method,并认为我也可以这样做。这是我做的,

var d = new Date();
var startTime = d.getTime();
var endTime;

function testTargeAlgorithm(){
  ....
  ....
}

testTargetAlgorithm();

endTime = d.getTime();
console.log(endTime-startTime);

这是一个非常简单的算法,所以我不认为时间会有明显的差异。但如果毫秒无法衡量速度提升,我还能做些什么呢?

3 个答案:

答案 0 :(得分:3)

如果引擎支持,您可以使用performance.now()。由于页面加载或应用程序启动,因此以毫秒为单位给出时间,精确度为亚毫秒级。

performance.now() // 26742.766999999956

我知道Chrome支持它,但不确定其他浏览器,node.js或其他引擎独立的js引擎。


或者您可以循环多次运行代码,并测量总时间。

答案 1 :(得分:1)

反复运行相同的功能。

var startTime = (new Date()).getTime();
for(var i=0;i<1000;i++) {
    testTargeAlgorithm()
}
var endTime = (new Date()).getTime();
console.log(endTime-startTime);

编辑以反映建议,感谢Marcel

答案 2 :(得分:0)

我最终使用process.hrtime()来提供纳秒精度来测量运行时性能。请注意,此方法仅适用于Node.js.在Chrome&amp; Firefox,您可以使用performance.now()

即使运行相同的算法/功能,返回的时间差仍然会变化(以纳秒为单位),可能是由于CPU使用率和其他未知效应,因此建议运行很多次并计算平均值。例如:

function calAvgSpeed(timesToRun, targetAlgorithm){

var diffSum = 0;
for(var i = 1; i <= timesToRun; i++){
    var startTime = process.hrtime();
    targetAlgorithm();
    var diff = process.hrtime(startTime);
    diffSum += diff[1];
   }
   return Math.floor(diffSum / times);
}