nodejs请求库,获取响应时间

Dav*_*lla 12 node.js

使用nodejs request库:https://github.com/mikeal/request

var request = require('request');
request('http://example.com', function (error, response, body) {
   ...
})
Run Code Online (Sandbox Code Playgroud)

是否有可能在回调上获得响应时间?doc提到了response.statusCode.看看库源代码我也看到了无证件的response.headers和response.href,但是我没有看到responseTime或者类似的.

或者,是否有替代库request提供响应时间?

ps:我知道我可以做这样的事情,但这不是解决方案,因为我正在制作许多异步请求,我无法控制每个请求何时开始.

var request = require('request');
var start = new Date();
request('http://example.com', function (error, response, body) {
   ...
   var responseTime = new Date() - start;
})
Run Code Online (Sandbox Code Playgroud)

Jam*_*ner 19

请求库可以为您做计时(docs):

request.get({
  url : 'http://example.com',
  time : true
},function(err, response){
  console.log('Request time in ms', response.elapsedTime);
});
Run Code Online (Sandbox Code Playgroud)

正如问题所暗示的那样,你可能会遇到启动计时器的问题,request然后调用然后在回调中停止计时器:

var start = new Date();
request.get('http://example.com', function(err, response){
  // NOT GOOD
  console.log('Request time plus 5 seconds', new Date() - start);
});
require('sleep').sleep(5); // time-consuming synchronous action
Run Code Online (Sandbox Code Playgroud)


Aar*_*our 6

就像是

var timedReq = function(url, next) {
  var start = new Date();
  request(url, function(err, res, body) {
    res.responseTime = new Date() - start;
    next(err, res, body);
  });
};
Run Code Online (Sandbox Code Playgroud)

会为你做的.这似乎足够小,它可能比找到一个新的库更容易.

  • 一点都不复杂!`var start = process.hrtime();`和`res.responseTime = parseInt(process.hrtime(start)[1]/10000000,10);`好的,我骗了. (6认同)
  • 我建议使用http://nodejs.org/api/process.html#process_process_hrtime而不是Date.我用它来http://arrowbreaker.com/demos/sup,它给出了非常准确的结果. (2认同)