我正在研究这样的方法:
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页面上报告时间。
答案 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。它会做你想要的。或者也许你可以检查他是如何做到的。