我想实现一个脚本,该脚本使用常规浏览器从客户端测量我的服务器(=远程url)的响应时间,而不需要任何额外的插件(Java等)。
我只关注网络速度(响应时间),而不是页面加载速度。
你建议我测量什么? 它必须在tcp / ip上运行,而不是像ICMP(ping)那样运行。
您如何绕过客户端的实施? 我更喜欢使用JavaScript(JQuery)。
更新:由于我需要跨域检查,ajax调用似乎不是一个选项
此外,ajax方法似乎并不精确。与来自FireBug的信息相比,测试机器上的结果似乎有大约50ms的开销(它几乎是一个恒定的值,无论域是什么 - 我猜它是介于两者之间的处理时间)
答案 0 :(得分:7)
您只需要为请求计时:
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;
}
});
答案 1 :(得分:1)
创建一个始终在类似mysite.net/speedtest的网址上返回空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到其他服务器,那么我对你的目标有点困惑。
答案 2 :(得分:0)
var startTime = (new Date()).getTime(),
endTime;
$.ajax({
type: "GET",
url: "test.html",
dataType: "html",
success:function(data){
endTime = (new Date()).getTime();
}
});
现在采取差异。
答案 3 :(得分:0)
你可以很容易地做到。
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
}
});
请求的页面应为空,以模仿额外的加载时间。