我需要一种方法来测量创建http请求的javascript函数的响应时间,其中包括该http请求的响应时间。但是,我无权修改该功能。
这是我正在尝试做的事情:
var startTime = performance.now(); //log start timestamp
foo.bar(); //The Function that generates an HTTP request
var endTime = performance.now(); //log end timestamp
var diffTime = endTime - startTime;
但只捕获函数生成请求所需的时间。有没有办法捕获在javascript中生成的请求的响应时间?
答案 0 :(得分:1)
您必须检查请求回调中的时间戳。
编辑:
如果你想完全独立于应用程序测量它(所以只需添加另一个js文件),我想你可以装饰XMLHttpRequest。
window.XMLHttpRequest = function () {...}
您的包装器需要具有相同的API,以便应用程序仍然有效,并且还可以在内部测量性能。
答案 1 :(得分:0)
我通常会点击F12在任何浏览器上显示开发工具,转到网络选项卡,然后查看正在进行的ajax调用,它会告诉您请求和休息所用的确切时间粒度细节。
但是,如果您想要考虑进行ajax调用的java脚本,那么在调用之前启动计时器并在ajax调用的完整事件上停止它(将需要编辑功能)。如果它是异步的,这是捕获它的唯一方法。只是根据你的描述猜测它实际上是一个异步调用,这解释了函数的行为只是让ajax调用然后返回 - 而不是关心状态或响应......
答案 2 :(得分:0)
如果您碰巧在无法访问的功能中使用jQuery,可以试一试:
$.when(foo.bar()).done(function()
{
console.log("Fired after ajax request is done!");
});
再看看:
var obj = {
promise: function() {
// do something
}
};
$.when( obj ).done( fn );
或
var obj = {
promise: foo.bar()
};
$.when( obj ).done( callback );
或查看这篇精彩文章http://www.erichynds.com/blog/using-deferreds-in-jquery
答案 3 :(得分:0)
好吧,如果你没有访问该功能或者你不能编辑ajax调用,你可以创建一个监听器。战略:
你应该问问自己:当这个电话结束时,哪种变量会被改变?事件ui的视觉变化可以用作标志
如果你想知道如何创建你的监听器..它看起来像这样:
function listener()
{
// do some checks here
if (done)
{
var endTime = performance.now(); //log end timestamp
var diffTime = endTime - startTime;
}
else
{
setTimeout(listener(), 100);
}
}
listener(); // activate the listener