Javascript函数的性能,使HTTP请求

时间:2014-11-20 20:58:57

标签: javascript performance http request

我需要一种方法来测量创建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中生成的请求的响应时间?

4 个答案:

答案 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调用,你可以创建一个监听器。战略:

  1. 为http请求调用声明一个标志
  2. 开始通话
  3. 启动一个每X mili-seconds循环的侦听器并检查完成状态(在ajax函数之外及之后调用)
  4. 你应该问问自己:当这个电话结束时,哪种变量会被改变?事件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