如何在Node.js中获取microtime?

如何在Node.js中获得最准确的时间戳?

ps我的版本的Node.js是0.8.X和节点microtime扩展不适合我(安装崩溃)

new Date().getTime() ? 这给你一个毫秒的时间戳,这是JS会给你的最准确的。

更新:正如vaughan所说的, process.hrtime()在Node.js中是可用的 – 它的分辨率是纳秒,因此它的更高,也并不意味着它必须更精确。

PS:为了更清楚一点, process.hrtime()返回一个包含当前高分辨率实时的Array包含[秒,纳秒]

在Node.js中,通过process.hrtime提供“高分辨率时间”。 它返回一个数组,其中第一个元素的时间以秒为单位,第二个元素是剩余的纳秒数。

要获得当前时间(以微秒为单位),请执行以下操作:

 var hrTime = process.hrtime() console.log(hrTime[0] * 1000000 + hrTime[1] / 1000) 

(感谢itaifrenkel在上面的转换中指出错误。)

在现代浏览器中,精度为微秒的时间可用作performance.now 。 有关文档,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Performance/now

我已经为Node.js实现了这个基于process.hrtime函数,如果你只是想计算一个程序中两个点之间的时间差,那么这个函数就比较难使用。 请参阅http://npmjs.org/package/performance-now 。 根据规范,此函数以毫秒为单位报告时间,但是它是一个具有亚毫秒级精度的浮点数。

在此模块的2.0版中,报告的毫秒数与节点进程启动时间( Date.now() - (process.uptime() * 1000) )有关。 如果需要类似于Date.now()的时间戳,则需要将其添加到结果中。 还要注意,你应该重新计算Date.now() - (process.uptime() * 1000) 。 对于精确的测量, Date.nowprocess.uptime都非常不可靠。

为了获得当前的时间,你可以使用这样的东西。

 var loadTimeInMS = Date.now() var performanceNow = require("performance-now") console.log((loadTimeInMS + performanceNow()) * 1000) 

另请参阅: JavaScript是否提供高分辨率计时器?

 now('milli'); // 120335360.999686 now('micro') ; // 120335360966.583 now('nano') ; // 120335360904333 

now知道是:

  const now=(unit)=>{ const hrTime=process.hrtime(); switch (unit) { case 'milli':return hrTime[0] * 1000 + hrTime[1] / 1000000; case 'micro':return hrTime[0] * 1000000 + hrTime[1] / 1000; case 'nano':return hrTime[0] * 1000000000 + hrTime[1] ; break; default:return hrTime[0] * 1000000000 + hrTime[1] ; } } 

Node.js nanotimer

我在process.hrtime函数调用的顶部为node.js写了一个包装库/对象。 它具有有用的function,如定时同步和asynchronous任务,以秒,毫秒,微或甚至纳秒为单位指定,并遵循内置javascript定时器的语法以便熟悉。

计时器对象也是离散的,所以你可以尽可能的多,每一个都有自己的setTimeoutsetInterval进程运行。

这就是所谓的nanotimer 。 一探究竟!

还有https://github.com/wadey/node-microtime

 > var microtime = require('microtime') > microtime.now() 1297448895297028 

要比Date.now()更精确,但浮点精度为毫秒。

 function getTimeMSFloat() { var hrtime = process.hrtime(); return ( hrtime[0] * 1000000 + hrtime[1] / 1000 ) / 1000; } 

有一些npm包绑定到系统gettimeofday()函数,该函数在Linux上返回一个微秒的精度时间戳。 searchnpm gettimeofday 。 调用C比process.hrtime()更快