如何在独立JavaScript程序中计算运行时速度?
我正在做一些JavaScript练习并考虑如何将我的解决方案(算法)改进为the exercise。我正在考虑在调整代码后计算运行时速度,以便知道速度有多快。我搜索并找到了this method,并认为我可以做同样的事情。这是我做的,如何在独立JavaScript程序中计算运行时速度?
var d = new Date();
var startTime = d.getTime();
var endTime;
function testTargeAlgorithm(){
....
....
}
testTargetAlgorithm();
endTime = d.getTime();
console.log(endTime-startTime);
这是一个非常简单的算法,所以我不指望会有明显的时间差异。但是,如果毫秒不能衡量速度的提高,我还能做什么?
你可以,如果引擎支持它使用performance.now()
。这会给出一个以毫秒为单位的时间,自加载页面或应用程序启动以来,精度为亚毫秒级。
performance.now() // 26742.766999999956
我知道Chrome支持它,但不知道其他浏览器,node.js或其他引擎独立js引擎。
或者你可以在一个循环中运行代码很多次,并测量所花费的总时间。
谢谢。我使用Node.js作为解释器,我发现它有一个类似的函数process.hrtime(),它返回一个两元素数组:'[seconds,nanoseconds]'。以那纳秒的精度,我可以看到每次调整后的差异。另一个新问题是每次运行的偏差:即使不进行调整,每次程序运行时差异都会有所不同。所以我做的是平均运行10000次以减少偏差。 – Bao 2013-02-21 15:17:34
一次又一次运行相同的功能。
var startTime = (new Date()).getTime();
for(var i=0;i<1000;i++) {
testTargeAlgorithm()
}
var endTime = (new Date()).getTime();
console.log(endTime-startTime);
编辑,以反映的建议,感谢马塞尔
我试过了,但即使我运行1000000次的算法,它似乎毫秒也无法捕捉细微的差异。我猜测这种算法对于这种测量来说太简单了。但是,使用纳秒级方法(Node.js的'process.hrtime()'),成功捕获时间差异。 – Bao 2013-02-21 15:20:42
这个例子中有一个错误。 “var endtime”需要是“var endTime”。所以我不会让我做一个字符编辑。 – broccoli2000 2016-09-11 18:24:25
我最终使用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);
}
使用内置于Firebug或WebKit调试器的分析器。 – marekful 2013-02-20 16:39:47
添加一个循环,以便您可以调用您的函数1000次或更多次。另一方面,如果差值 AndrewR 2013-02-20 16:43:15
@MarcellFülöp我明白了。我会仔细看看的。 – Bao 2013-02-21 15:22:21