提高定时方法的性能



我使用此nodejs模块来测量/profile我的应用程序的一部分要执行多长时间。

// 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中。

我该如何更快?

您进行了很多额外的计算...

// 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;

此代码应给出相同的结果。(省略Math.Round(

所有方法(performance.now&amp; date.getTime(以毫秒为单位的返回时间。据我所知,预计输出。

现在在某些浏览器(Chrome(中的性能可以为您提供其他子毫秒段,然后返回的值将是非INT

,例如

> performance.now()
160693.10000000405

还测试时间检索方法的性能:

在chrome和我的计算机date.now((上给出最大速度,dervily.now((

的三倍输出

请参阅https://jsperf.com/get time-3482/1

          Date.now    performance.now
Chrome    10 MOps      3.5 MOps
Safari    10 MOps      7   MOps

如果您进行多次运行或测量大时间间隔,则可能不需要额外的纳秒prection

然后,您最终将获得IE9 代码:

var now = Date.now;
function clock(start) {
    if ( !start ) return now();
    var end = now();
    return end - start;
}
module.exports = clock;

======

其他注释:

绩效的性能。现在与日期。

他们正在使用不同的处理器说明来获取时间,请在这里查找一些详细信息,http://zeromq.org/results:more-precise-0mq-tests

相关内容

  • 没有找到相关文章

最新更新