2013-02-13 13 views
6

余分なプラグイン(Javaなど)を使用せずに通常のブラウザを使用してクライアントからのサーバ(=リモートURL)の応答時間を測定するスクリプトを実装したいと思います。サーバの応答時間を測定する(クライアント側)

私はネットワーク速度(応答時間)ではページロード速度がではないと考えています。

私は何を測定することをお勧めしますか? これはICMP(ping)のようなものではなく、tcp/ipで動作する必要があります。

クライアントサイドの実装についてどう思いますか? 私はJavaScript(JQuery)を使いたいと思っています。


アップデート:私は、クロスドメインチェックを必要として、Ajaxの呼び出しはオプションさらに

していないようです、Ajaxの方法は全く正確にはいないようです。結果は、FireBugの情報と比較して、テストマシンで約50msのオーバヘッドを持つように見えます(ドメインが何であっても、間違いなく処理時間だと思います)。

+0

あなたは[このような]という意味です(http://stackoverflow.com/questions/3498503/find-out-how-long-an-ajax-request-took-to-complete?lq=1)? – Carsten

+0

はい、しかし私が知っている限り、jQuery.getはHTMLコードを含む全体の応答を返します。その場合、サイトの速度が応答時間に影響します。 私はむしろpingのようなものを探しています。 EDIT:また、JQueryは測定方法に影響するコールバックを呼び出す前に他のコードを呼び出す可能性があります( – Kraken

+0

)。この問題については、javascript/jqueryからのクロスドメイン呼び出しが失われているようです原因。JSONPとプロキシが答えのようですが、そうすることで応答時間はもはや価値がなくなります。 –

答えて

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'); 

新規: あなたの質問は、追加した追加情報と一致しません。クライアントのpingを制御しないURLにしたいと思っています。これは、最初に尋ねたものとはまったく別の問題で、からサーバへの応答時間を取得します。あなたのサーバーにクライアントのpingを取得しようとしているなら、ajax呼び出しがそのトリックを行います。あなたが他のサーバーにpingを取得しようとしているなら、あなたの目標が何であるかについて少し混乱しています。

+0

これは、Ajaxリクエストが完了する前に警告されます。 –

+0

@RobertFrickeおっと、そうです。私はそれを固定しました、メモのおかげで。 – AmericanUmlaut

+0

クール豆。しかし、この様子では、 'endTime'は正しく設定されていますが、' alert'はajax呼び出しの直後(コールバックが行われる前)に実行されるため、 'success'コールバックの前に実行されます。 –

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; 

    } 
}); 
+0

responseTimeMsはあなたのスコープ外には見えません成功関数。 – AmericanUmlaut

+0

はい、しかし私が知っている限り、これはHTMLコードを含む全体の応答を返します。その場合、サイトの速度が応答時間に影響します。私は正しい? – Kraken

+1

サーバがレスポンスボディを返さないようにするには、 'type:" HEAD "'を使い、ヘッダだけが返されます。 –

0
var startTime = (new Date()).getTime(), 
    endTime; 
$.ajax({ 
type: "GET", 
url: "test.html", 
dataType: "html", 
success:function(data){ 
endTime = (new Date()).getTime(); 
} 
}); 

今の違いを取ります。

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 
    } 
}); 

要求するページは、追加の読み込み時間を模倣するために空である必要があります。

+0

それは事です、私はそれを空にすることはできません。とにかく、@ RobertFrickeのソリューションを使ってヘッダーを要求すれば、私はこの問題を回避することができると思います。 – Kraken

+1

@krakenはい、ヘッダーを取得して問題を解決できます。 – Licson

関連する問題