使用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;
})
请求库可以为您(文档)计时:
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
类似的东西
var timedReq = function(url, next) {
var start = new Date();
request(url, function(err, res, body) {
res.responseTime = new Date() - start;
next(err, res, body);
});
};
会为你做的。这看起来足够小,可能比找到一个新图书馆更容易。
您也可以使用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
您可以用高分辨率计时器包装任何代码块,如:
const start = process.hrtime.bigint();
console.log(`do some work...`);
console.log(
`took ${Number(process.hrtime.bigint() - start) / 1e6}ms`
);
这不需要任何第三方库,可以为您提供非常精确的测量结果。