Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 测量服务器响应时间(客户端)_Javascript_Jquery_Client Side_Httpresponse_Response Time - Fatal编程技术网

Javascript 测量服务器响应时间(客户端)

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毫秒

我想实现一个脚本,该脚本将使用常规浏览器(无需任何额外插件(Java等))从客户端测量我的服务器(=远程url)的响应时间

我只关注网络速度(响应时间),而不是页面加载速度

你建议我测量什么? 它必须在tcp/ip上运行,而不是像ICMP(ping)这样的任何东西

您将如何在客户端进行实现? 我更喜欢使用JavaScript(JQuery)


更新:由于我需要跨域检查,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
    }
});