node.js timing:process.hrtime()vs new Date()。getTime()?

我试图解决从node.js到远程http api的请求花费太长时间的问题。 首先,我决定添加时间到我的节点应用程序:

'use strict'; let logger = require('./logger'); let request = require('request'); module.exports = function(uri, done) { // set full url. let options = { uri: `http://example.org/${uri}`, timeout: 60000, json: true, gzip: true, encoding: null }; const startDate = new Date().getTime(); const start = process.hrtime(); request(options, function(error, response, body) { const endDate = new Date().getTime(); const end = process.hrtime(start); const durationDate = endDate - startDate; const duration = end[1] / 1000000; const diff = Math.abs(Math.round(durationDate - duration)); logger.debug(`${uri} hrtime: ${duration} ms, date: ${durationDate} ms, diff: ${diff}`); if (!error && response.statusCode === 200) { done(error, response, body, body); } else { done(error, response, body); } }); }; 

这是我得到的输出:

 <....> 2016-06-29T10:26:59.230Z /account hrtime: 41.567354 ms, date: 41 ms, diff: 1 2016-06-29T10:27:06.369Z /account hrtime: 42.052154 ms, date: 42 ms, diff: 0 2016-06-29T10:27:13.368Z /account hrtime: 51.582807 ms, date: 5052 ms, diff: 5000 2016-06-29T10:27:14.971Z /account hrtime: 40.705936 ms, date: 40 ms, diff: 1 2016-06-29T10:27:22.490Z /account hrtime: 45.953398 ms, date: 5046 ms, diff: 5000 2016-06-29T10:27:29.669Z /account hrtime: 42.504256 ms, date: 5043 ms, diff: 5000 2016-06-29T10:27:31.622Z /account hrtime: 39.405575 ms, date: 39 ms, diff: 0 <....> 2016-06-29T10:27:45.135Z /account hrtime: 40.594642 ms, date: 41 ms, diff: 0 2016-06-29T10:27:52.682Z /account hrtime: 40.290881 ms, date: 40 ms, diff: 0 2016-06-29T10:28:05.115Z /account hrtime: 50.81821 ms, date: 10050 ms, diff: 9999 2016-06-29T10:28:13.555Z /account hrtime: 52.061123 ms, date: 52 ms, diff: 0 <.....> 2016-06-29T10:29:45.052Z /account hrtime: 44.252486 ms, date: 44 ms, diff: 0 2016-06-29T10:29:46.829Z /account hrtime: 39.652963 ms, date: 40 ms, diff: 0 2016-06-29T10:29:49.101Z /account hrtime: 40.841915 ms, date: 41 ms, diff: 0 2016-06-29T10:29:55.097Z /account hrtime: 44.161802 ms, date: 5044 ms, diff: 5000 2016-06-29T10:30:01.784Z /account hrtime: 47.732807 ms, date: 47 ms, diff: 1 2016-06-29T10:30:04.309Z /account hrtime: 40.151299 ms, date: 40 ms, diff: 0 2016-06-29T10:30:06.926Z /account hrtime: 39.933368 ms, date: 40 ms, diff: 0 2016-06-29T10:30:14.440Z /account hrtime: 53.610396 ms, date: 5054 ms, diff: 5000 

所以有时候hrtime和getTime()之间的区别是巨大的。
这不只是一些误报,而是实际的行为 – 如果看看远程的http服务器日志,我看到所有的请求实际上花费时间由hrtime报告,getTime()报告的时间实际上是多久的node.js应用程序响应。 因此,node.js应用程序本身似乎有某种延迟。 任何命中为什么发生这种情况?

节点v4.4.6

更改

 const duration = end[1] / 1000000; 

 const duration = (end[0]*1000) + (end[1] / 1000000); 

你会得到所需的结果。 hrtime返回两个值的数组 – 第一个是秒,所以乘以1000得到毫秒,第二个值是微秒,所以除以1,然后是6个零,即1000000加两个都得到结果