2

我正在研究这样的方法:

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 页面上报告时间。

4

5 回答 5

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);
    });
};
于 2012-08-29T01:33:53.243 回答
0

如果您使用的是 Ruby 或 .Net,您可以查看MiniProfiler。它会做你想做的事。或者,也许你可以检查一下他在里面是怎么做的。

于 2012-08-29T01:23:43.397 回答
0

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

在 *nix 下,您可以使用简单的脚本和 wget 和/或 curl 将其自动化。

于 2012-08-29T01:06:34.180 回答
0

Firebug for Firefox 会告诉你调用需要多长时间

于 2012-08-29T00:51:05.817 回答
0

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

于 2012-08-29T00:57:28.353 回答