15

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

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

是否可以获得回调的响应时间?该文档提到了 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;
})
4

3 回答 3

29

请求库可以为您计时(文档):

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

正如问题所暗示的,您可能会遇到启动计时器、调用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
于 2016-06-08T10:22:38.873 回答
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);
  });
};

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

于 2013-08-07T15:09:20.667 回答
3

除了使用 Date(),您还可以使用 process.hrtime。我有一个专门针对此类使用 hrtime 的案例的库。库名称是exectimer

你可以像这样使用它:

var timedReq = function(url, next) {
  var tick = new t.Tick("responseTime");
  tick.start();
  request(url, function(err, res, body) {
    tick.stop();
    next(err, res, body);
  });
};

// when ready check the results with this:
var responseTime = t.timers.responseTime;
console.log(responseTime.min()); // minimal response time
console.log(responseTime.max()); // minimal response time
console.log(responseTime.mean()); // mean response time
console.log(responseTime.median()); // median response time
于 2014-08-27T12:25:04.357 回答