测量node.js http请求的时间

时间:2014-09-25 11:23:00

标签: javascript node.js timing http-request

我想知道我们是否可以使用node.js来衡量完成http请求所需的时间。稍微修改文档(here)中的示例,可以轻松记下以下代码。



var http = require('http');
var stamp1 = new Date();
var stamp2, stamp3, stamp4;
var options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST'
};

var req = http.request(options, function(res) {
  stamp3 = new Date();
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
  res.on('end', function () {
    stamp4 = new Date();
    console.log ("Stamp 3: " + stamp3);
    console.log ("Stamp 4: " + stamp4);
  });
});
req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

stamp2 = new Date();
console.log ("Stamp 1: " + stamp1);
console.log ("Stamp 2: " + stamp2);




现在让我谈谈我的观点。在响应上,可以很容易地测量响应所花费的时间,因为在开始时设置了stamp3并且设置了结束标记4。因此,原则上对于相对大量的数据,这两个时间戳将是不同的。

然而,我的问题是,邮票1和邮票2是否实际衡量了在准备和派遣请求时发生的情况。换句话说,req.write(....)是一个同步操作吗?基于node.js原则,我希望req.write(...)是一个异步操作,其中一个可以传递一个任意大的文档,然后成功完成后我们就可以知道请求已经完成了回调。

评论

2 个答案:

答案 0 :(得分:1)

已存在两个功能:

  • console.time(id),启动计时器
  • console.timeEnd(id)结束计时器,打印ID后跟ms的时间

所以在你的情况下:

var req = http.request(options, function(res) {
    console.time('Requete: '); //Begin to count the time
    stamp3 = new Date();
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log('BODY: ' + chunk);
    });
    res.on('end', function () {
        stamp4 = new Date();
        console.log ("Stamp 3: " + stamp3);
        console.log ("Stamp 4: " + stamp4);
        console.timeEnd('Requete: '); //Will print "Requete: X" with X being the time in ms
    });
});

答案 1 :(得分:0)

docs没有提及回调,所以我假设req.writeres.end同步。

所以在你的情况下,如果你只是提到你正在初始化的那个请求,我认为时间测量应该是准确的。我不认为时差会非常大(甚至可能在相同的毫秒级)。