3

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

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

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

testTargetAlgorithm();

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

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

4

3 回答 3

4

performance.now()如果引擎支持,您可以使用它。自页面加载或应用程序启动以来,这给出了以毫秒为单位的时间,精度为亚毫秒。

performance.now() // 26742.766999999956

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


或者您可以在一个循环中多次运行您的代码,并测量所花费的总时间。

于 2013-02-20T16:43:39.393 回答
2

一次又一次地运行相同的功能。

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

编辑以反映建议,谢谢马塞尔

于 2013-02-20T16:41:48.387 回答
1

我最终使用process.hrtime()提供纳秒精度来测量运行时性能。请注意,此方法仅适用于 Node.js。在 Chrome 和 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);
}
于 2013-02-26T15:13:52.487 回答