Javascript 测量服务器响应时间(客户端)
我想实现一个脚本,该脚本将使用常规浏览器(无需任何额外插件(Java等))从客户端测量我的服务器(=远程url)的响应时间 我只关注网络速度(响应时间),而不是页面加载速度 你建议我测量什么? 它必须在tcp/ip上运行,而不是像ICMP(ping)这样的任何东西 您将如何在客户端进行实现? 我更喜欢使用JavaScript(JQuery)Javascript 测量服务器响应时间(客户端),javascript,jquery,client-side,httpresponse,response-time,Javascript,Jquery,Client Side,Httpresponse,Response Time,我想实现一个脚本,该脚本将使用常规浏览器(无需任何额外插件(Java等))从客户端测量我的服务器(=远程url)的响应时间 我只关注网络速度(响应时间),而不是页面加载速度 你建议我测量什么? 它必须在tcp/ip上运行,而不是像ICMP(ping)这样的任何东西 您将如何在客户端进行实现? 我更喜欢使用JavaScript(JQuery) 更新:由于我需要跨域检查,ajax调用似乎不是一个选项 此外,ajax方法似乎一点也不精确。与FireBug中的信息相比,测试机上的结果似乎有大约50毫秒
更新:由于我需要跨域检查,ajax调用似乎不是一个选项
此外,ajax方法似乎一点也不精确。与FireBug中的信息相比,测试机上的结果似乎有大约50毫秒的开销(这几乎是一个常量值,无论域是什么-我猜这是介于两者之间的处理时间)。创建一个资源,它总是在mysite.net/speedtest这样的url上返回一个空的200 OK响应。然后是:
var startTime = (new Date()).getTime(),
endTime;
$.ajax({
type:'GET',
url: 'http://mysite.net/speedtest',
async: false,
success : function() {
endTime = (new Date()).getTime();
}
});
alert('Took ' + (endTime - startTime) + 'ms');
这将为您提供向服务器发送请求所需的时间,以及服务器加载响应请求所需的最小资源集所需的时间
新的:
您的问题现在与您添加的其他信息不一致。你想让客户端ping到一个你无法控制的URL——这与你最初要求的完全不同,从你的服务器获得响应时间。如果您试图让客户机ping到您的服务器,ajax调用就可以做到这一点。如果您试图让他们ping到其他服务器,那么我对您的目标有点困惑。您只需要对请求计时:
var sendDate = (new Date()).getTime();
$.ajax({
//type: "GET", //with response body
type: "HEAD", //only headers
url: "/someurl.htm",
success: function(){
var receiveDate = (new Date()).getTime();
var responseTimeMs = receiveDate - sendDate;
}
});
现在来看看区别。你可以很容易地做到
var t = Date.now();
var t2;
$.ajax({
url:'page',
success:function(){
t2 = Date.now();
console.log(t2-t);//the time needed to do the request
}
});
要请求的页面应该是空的,以模拟额外的加载时间。你的意思是?是的,但据我所知,jQuery.get返回整个响应,包括html代码。在这种情况下,站点的速度会影响响应时间。我在找像平这样的东西。编辑:此外,JQuery可能(我不太熟悉)在调用回调之前调用其他代码,这将影响度量方法。阅读有关此问题的内容,来自javascript/JQuery的跨域调用似乎是一个失败的原因。JSONP和代理似乎是答案,通过这样做,您的响应时间不再有价值。ResponseTimes在success函数的范围之外不可见。是的,但据我所知,它返回整个响应,包括html代码。在这种情况下,站点的速度会影响响应时间。我说的对吗?如果您不希望服务器返回响应正文,请使用
键入:“HEAD”
,并且只返回标题。这听起来很合理,我们会检查它。到目前为止谢谢你。遗憾的是,这种方法似乎不够精确。我也会有跨域检查的问题。我不知道ajax调用的内部实现,但它似乎会获取头,即使它抛出错误回调。从这一点我可以看出,在google.com上大约需要100毫秒(Firebug中为50毫秒),在example.com上大约需要400毫秒(Firebug中为350毫秒),等等。我已经在多个域上测试了这一点。我不知道为什么它会获取标题,尽管它不应该(错误回调),但从这一点我推断出精度会有问题。这会在ajax请求完成之前发出警报。@RobertFricke,你说得对。我修好了,谢谢你的留言。酷豆。然而,从外观上看,endTime
设置正确,但是警报仍然在成功
回调之前运行,因为它将在ajax调用之后(回调之前)直接执行。@RobertFricke I打算将async设置为false,以便函数在设置endTime之前停止,很抱歉今天有这么多的打字错误…不需要向我道歉=)就是这样,我不能让它空着。无论如何,我想如果我只是使用@RobertFricke解决方案请求标题,我可能会绕过这个问题problem@kraken是的,你只需要得到标题,问题就解决了。
var t = Date.now();
var t2;
$.ajax({
url:'page',
success:function(){
t2 = Date.now();
console.log(t2-t);//the time needed to do the request
}
});