Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js+;mikeal/请求-如何测量请求时间?_Javascript_Node.js_Time_Request - Fatal编程技术网

Javascript node.js+;mikeal/请求-如何测量请求时间?

Javascript node.js+;mikeal/请求-如何测量请求时间?,javascript,node.js,time,request,Javascript,Node.js,Time,Request,我正在使用mikeal/request库访问WebAPI。 我想记录每个请求的执行时间 我有多个嵌套请求,因此我不想将它们放入每个请求中: var start=Date.now(); ... var time=Date.now()-start; log('Finished in'+time+'ms') 我希望有可能这样做: requestWithDefaults=request.defaults({。。。 开始时间:空 }); requestWithDefaults.on('request.

我正在使用mikeal/request库访问WebAPI。 我想记录每个请求的执行时间

我有多个嵌套请求,因此我不想将它们放入每个请求中:

var start=Date.now();
...
var time=Date.now()-start;
log('Finished in'+time+'ms')

我希望有可能这样做:

requestWithDefaults=request.defaults({。。。
开始时间:空
});
requestWithDefaults.on('request.prepare',函数(){
startTime=Date.now();
});
requestWithDefaults.on('request.finished',函数(){
var time=Date.now()-startTime;
log('Finished in'+time+'ms');
});


但我不知道如何抓住那些时刻。以一种简单的方式是否可能

如果只想记录某个进程的持续时间,可以使用内置的Node.js
console.time()
console.timeEnd()
函数。你可以

您可以编写一个小模块来包装请求功能,并在控制台中添加。time[End]语句如下所示:

var request = require('request');

module.exports = {
    get: function(url, next) {
        // start console timer
        console.time(url);
        request.get(url, function() {
            // end console timer
            console.timeEnd(url);
            next.apply(this, arguments);
        });
    }
};
然后,您将直接包括这个模块而不是请求模块,这将在默认情况下为您提供日志记录。注意:这只是GET请求的一个示例,其余的可以构建出来


此输出格式为
[标签]:475ms
。非常好,非常干净,可以显示完成某件事情需要多少毫秒。这不会为您提供来自moment.js的良好格式,但它确实很简单。

感谢您的快速响应。console.time/timeEnd是一个非常有趣的解决方案(我不知道这一点),但对我来说主要的问题是如何在准备请求和完成请求的过程中进行连接。事件request.prepare和request.finished都是假设的,只是我的愿望。我不知道如何处理它们。@Rympau我仔细查看了请求模块的源代码,发现对于开始请求或结束请求,似乎没有真正好的事件挂钩(如果没有回调,则结束事件除外)。因此,如果是我,我会编写一个非常精简的模块来包装请求模块并自己发出这些事件,然后确保与请求模块的所有交互都通过该包装模块。感谢您检查请求和想法。我将尝试编写精简模块,但由于不知道如何编写,如果有任何提示,我将不胜感激。@Rympau我刚刚更新了答案,为该模块包装请求提供了一个起点。