我正在做一些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);
这是一个非常简单的算法,所以我不认为时间会有明显的差异。但如果毫秒无法衡量速度提升,我还能做些什么呢?
答案 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);
}