【问题标题】:nodejs request library, get the response timenodejs请求库,获取响应时间
【发布时间】:2013-08-09 00:46:55
【问题描述】:

使用 nodejs request 库: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;
})

【问题讨论】:

    标签: node.js


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      类似

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

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

      【讨论】:

      • 我建议使用nodejs.org/api/process.html#process_process_hrtime 而不是日期。我将它用于arrowbreaker.com/demos/sup,它给出了非常准确的结果。
      • @Pickels 没听说过。我不想在我的示例中介绍处理 [seconds, ns] 数组的复杂性,但这似乎是个好主意。
      • 一点也不复杂! var start = process.hrtime();res.responseTime = parseInt(process.hrtime(start)[1] / 10000000, 10); 好吧,我撒谎了。
      • @Pickels 我错过了hrtime 的参数版本。这很方便。不过,您不需要将秒数和纳秒数相加来得到正确答案吗?
      • let diff=process.hrtime(start); res._time=diff[0]+diff[1]/1e9;
      【解决方案3】:

      您也可以使用 process.hrtime,而不是使用 Date()。我有一个专门针对此类使用 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多