如何在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.now
和process.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定时器的语法以便熟悉。
计时器对象也是离散的,所以你可以尽可能的多,每一个都有自己的setTimeout
或setInterval
进程运行。
这就是所谓的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()
更快