6

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

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

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

您将如何绕过客户端的实施?我更喜欢使用 JavaScript (JQuery)。


更新:因为我需要一个跨域检查,ajax 调用似乎不是一个选项

此外,ajax 方法似乎根本不精确。与来自 FireBug 的信息相比,测试机器上的结果似乎有大约 50 毫秒的开销(它几乎是一个恒定值,无论域是什么 - 我猜这是两者之间的处理时间)

4

4 回答 4

9

您只需要对请求进行计时:

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;

    }
});
于 2013-02-13T08:35:54.353 回答
1

创建一个始终在 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');

这将为您提供向服务器发送请求所需的时间,以及服务器加载响应请求所需的最少资源集所需的时间。

新:您的问题现在与您添加的附加信息不一致。您希望客户端对您无法控制的 URL 进行 ping - 这与您最初要求的完全不同的事情,即从您的服务器获取响应时间。如果您试图让客户端对您的服务器执行 ping 操作,那么 ajax 调用就可以解决问题。如果您试图让他们的 ping 到其他服务器,那么我对您的目标有点困惑。

于 2013-02-13T08:35:46.620 回答
0
var startTime = (new Date()).getTime(),
    endTime;
$.ajax({
type: "GET",
url: "test.html",
dataType: "html",
success:function(data){
endTime = (new Date()).getTime();
}
});

现在拿差价。

于 2013-02-13T08:40:09.903 回答
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
    }
});

要请求的页面应该是空的,以模拟额外的加载时间。

于 2013-02-13T09:08:50.297 回答