1

クライアントがリクエストを待機する時間を測定するにはどうすればよいですか。

サーバー側では、フィルターなどを介して簡単に実行できます。しかし、レイテンシーやデータ転送を含めた合計時間を考慮に入れたい場合、それは難しくなります。

基になるソケットにアクセスして、リクエストがいつ終了したかを確認することはできますか? または、いくつかのJavaScriptトリックを行う必要がありますか? おそらくブラウザとサーバー間のクロック同期によるものでしょうか?このタスク用に事前に作成された JavaScript はありますか?

4

6 に答える 6

3

ブラウザから測定してクライアントリクエストをシミュレートする場合は、firebugのネットタブを見て、ページの各部分のダウンロードにかかる時間とダウンロード順序を確認できます。

于 2008-09-17T18:27:36.810 に答える
3

HttpServletResponse オブジェクトと、HttpServletResponse によって返される OutputStream をラップできます。出力が書き込みを開始するときは startDate を設定でき、停止するとき (またはフラッシュされるときなど) は stopDate を設定できます。

これを使用して、すべてのデータをクライアントにストリーミングするのにかかった時間を計算できます。

アプリケーションで使用しており、数値は妥当に見えます。

編集: ServletFilter で開始日を設定して、クライアントが待機した時間を取得できます。出力をクライアントに書き込むのにかかった時間の長さを示しました。

于 2008-09-17T18:46:57.107 に答える
2

クライアントが純粋にサーバー側から待機しなければならなかった時間を知る方法はありません。JavaScriptが必要です。

クライアントとサーバーのクロックを同期させたくない、それはやり過ぎです。クライアントがリクエストを行ってから、応答の表示が終了するまでの時間を測定するだけです。

クライアントがAJAXの場合、これは非常に簡単です。newDate()。getTime()を呼び出して、要求が行われたときの時間をミリ秒単位で取得し、結果が解析された後の時間と比較します。次に、このタイミング情報をバックグラウンドでサーバーに送信します。

非AJAXアプリケーションの場合、ユーザーがリクエストをクリックすると、JavaScriptを使用して(クライアントの観点から)現在のタイムスタンプをクエリとともにサーバーに送信し、同じタイムスタンプをクライアントに返します。結果のページがリロードされます。そのページのonLoadハンドラーで、合計経過時間を測定し、それをサーバーに送り返します。XmlHttpRequestを使用するか、サーバーに対して行われる次のリクエストに追加の引数を追加します。

于 2008-09-17T18:28:51.640 に答える
0

0バイトのソケット送信バッファーを設定して(これはお勧めしません)、HttpResponse.send()の呼び出しをブロックするときに、最後のバイトがいつ残ったかを詳しく知ることができますが、移動時間は含まれません。 Ekk--私はそれについて言及することさえも吐き気がします。これは、Tomcatでコネクタ固有の設定を使用して行うことができます。(Tomcat 6コネクタのドキュメント

または、ある種のjavascriptタイムスタンプアプローチを思い付くことができますが、クライアントクロックを設定することは期待していません。Webサーバーへの複数の呼び出しを行う必要があります。

  • タイムスタンプクエリ
  • 本当のリクエスト
  • データの報告

そして、このアプローチはレイテンシーをカバーしますが、まだジッターの変動があります。

うーん...あなたがそこに持っている興味深い問題。:)

于 2008-09-17T18:26:57.857 に答える
0

私も同じ問題を抱えていました。しかし、このJavaOne Paperは、この問題を解決するのに本当に役立ちました。基本的にJavaScriptを使用して時間を計算します。

于 2009-03-09T08:41:53.717 に答える
0

netflix が開発したJiffy-webをチェックして、ページ全体をより正確に表示する -> ページのレンダリング時間

于 2008-09-18T08:50:12.040 に答える