我使用此nodejs模块来测量/分析我的应用程序部分执行的时间。
// polyfill for window.performance.now
var performance = global.performance || {}
var performanceNow =
performance.now ||
performance.mozNow ||
performance.msNow ||
performance.oNow ||
performance.webkitNow ||
function(){ return (new Date()).getTime() }
// generate timestamp or delta
// see http://nodejs.org/api/process.html#process_process_hrtime
function hrtime(previousTimestamp){
var clocktime = performanceNow.call(performance)*1e-3
var seconds = Math.floor(clocktime)
var nanoseconds = Math.floor((clocktime%1)*1e9)
if (previousTimestamp) {
seconds = seconds - previousTimestamp[0]
nanoseconds = nanoseconds - previousTimestamp[1]
if (nanoseconds<0) {
seconds--
nanoseconds += 1e9
}
}
return [seconds,nanoseconds]
}
function clock(start) {
if ( !start ) return hrtime();
var end = hrtime(start);
return Math.round((end[0]*1000) + (end[1]/1000000));
}
module.exports = clock;
用法很简单:
time = benchmark();
启动计数器,time = benchmark(time);
来衡量自上一次通话以来的持续时间。
这包括当我的应用程序需要在浏览器上运行时的polyfill。
该功能似乎运行良好,但严重(并且具有讽刺意味)影响性能,尤其是(并且不出所料)在Internet Explorer中。
如何更快地完成?
答案 0 :(得分:2)
你做了很多额外的计算......
await
此代码应该给出相同的结果。 (省略Math.round)
所有方法(performance.now&amp; Date.getTime)以毫秒为单位返回时间。 据我所知,这是预期的产出。
现在某些浏览器(Chrome)的性能可以为您提供额外的亚毫秒时间段,然后返回值将为非inte.g。
onSubmit
同时测试时间检索方法的性能:
在Chrome和我的计算机上,Date.now()给出了最高速度,三倍的性能输出。现在()
请参阅https://jsperf.com/get-time-3482/1
// polyfill for window.performance.now
var performance = global.performance || {}
var performanceNow =
performance.now ||
performance.mozNow ||
performance.msNow ||
performance.oNow ||
performance.webkitNow ||
function(){ return (new Date()).getTime() }
function clock(start) {
if ( !start ) return performanceNow();
var end = performanceNow();
return end - start;
}
module.exports = clock;
如果您进行多次运行或者您测量的时间间隔很长,则可能不需要额外的纳秒预备
然后你将得到IE9 +代码:
> performance.now()
160693.10000000405
=====
附加说明:
performance.now vs Date.now的性能可能而且应该在Intel vs AMD CPU上有所不同
他们使用不同的处理器说明来获取时间,请在此处查看详细信息,http://zeromq.org/results:more-precise-0mq-tests