有没有更好的方法来衡量从Ajax调用返回数据所需的总时间?

时间:2012-08-29 00:47:43

标签: javascript jquery ajax

我正在研究这样的方法:

function aa() {
    var start = new Date().getTime();
    $.ajax({
        cache: false,
        url: href + params.param,
        dataType: 'html'
    })
    .done(function (responseText) {
        xx();
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        yy();
    })
    .always(function () {
        zz(start);
    });
};

function zz(start) {
    var end = new Date().getTime();
    var elapsed = end.getMilliseconds() - start.getMilliseconds();
}

首先。这是衡量所需时间的有效方法吗?还有另一种方法可以做到这一点。例如,我是否可以通过某种方式从Ajax标题中读取内容,如果是这样,我怎么能阅读它?

请注意我正在寻找代码中的解决方案,以便我可以在HTML页面上报告时间。

5 个答案:

答案 0 :(得分:1)

这绝对是衡量发出请求和返回数据之间的时间长度的有效方法。目标是测量客户端在发出请求和接收响应之间看到的时间量,因此使用客户端的时钟是理想的。 (您通常希望避免涉及同步服务器和客户端时钟的时间比较;使用Date: HTTP标头就可以做到这一点。)

我会做两件事要改进:

  • 首先绑定always处理程序。由于Deferred回调按照添加顺序执行,因此首先绑定always意味着我们不会在done处理程序中通过计算成本高昂的操作抛弃测量值。

  • 无需实例化Date个对象。静态Date.now()以ms为单位返回当前时间。

您甚至可以在范围内进行经过的计算,以便done / fail回调可以使用。

function aa() {
    var start = Date.now(), elapsed;
    $.ajax({
        cache: false,
        url: href + params.param,
        dataType: 'html'
    })
    .always(function () {
        elapsed = Date.now() - start;
    });
    .done(function (responseText) {
        xx(elapsed);
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        yy(elapsed);
    });
};

答案 1 :(得分:0)

Firebug for Firefox将告诉您通话需要多长时间

答案 2 :(得分:0)

我认为你的方式非常干净。响应内置没有任何内容可以告诉您请求需要多长时间,除非您自己将它放在那里。如果您尝试进行某种服务器端日志记录,则不会考虑请求通过网络所需的时间。

答案 3 :(得分:0)

也许运行某种监控PC,只需每隔一段时间重新加载一次页面并保留自己的日志......如果传输时间太长,则会发出警报。

在* nix下,您可以使用简单的脚本和wget和/或curl自动执行此操作。

答案 4 :(得分:0)

如果您使用的是Ruby或.Net,可以查看MiniProfiler。它会做你想要的。或者也许你可以检查他是如何做到的。