【发布时间】:2014-09-25 11:23:00
【问题描述】:
我想知道我们是否可以测量使用 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);
现在让我来谈谈我的观点。在响应中,可以轻松测量响应所需的时间,因为在开始时设置了标记 3,在结束时设置了标记 4。因此,原则上对于相对大量的数据,这两个时间戳是不同的。
但是,我的问题是,标记 1 和 2 是否真正衡量了在准备和发送请求时发生的情况。换句话说, req.write(....) 是同步操作吗?基于 node.js 原则,我希望 req.write(...) 是一个异步操作,可以传递任意大的文档,然后在成功完成后,我们可以知道请求已完成的回调。
评论?
【问题讨论】:
-
您可能想要创建一个实用函数来执行测量,并且您可以使用
Date.now()从第一个时间戳中减去第二个时间戳来获得实际的持续时间。另请注意,您可以使用 process.hrtime 以纳秒为单位进行测量。 -
谢谢,我喜欢 process.hrtime 的建议,因为我不知道!作为减法,这正是我最终用于实际测量的观点。
标签: javascript node.js timing http-request