1

次のコードがありますが、Webページのヘッダー情報をプルバックするだけでよいため、後でHttpHeadメソッドに置き換えられます。変更後、同じWebページのセットのHttpGetよりも平均してHttpHeadが戻るのに時間がかかることに気付きました。正常ですか?ここで何が間違っている可能性がありますか?

    HttpClient httpclient = new DefaultHttpClient();
    // the time it takes to open TCP connection.
    httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, this.timeout);

    // timeout when server does not send data.
    httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, this.timeout);

    // the get method
    HttpGet httpget = new HttpGet(url);

    HttpResponse response = httpclient.execute(httphead);
4

1 に答える 1

2

それは正常ですか?

それは確かに少し独特のようです。

ここで何が問題なのですか?

言うのは難しいです。奇妙な動作は、サーバー側で発生する可能性が最も高いようです。私は次のことを確認します:

  • 同じページの GET と HEAD を繰り返し実行するマイクロ ベンチマークを作成して、パフォーマンスの違いが実際のものであり、測定方法による成果物ではないことを確認します。
  • パケット ロガーを使用して、実際に送受信されているものを確認します。
  • サーバー ログを確認します。
  • マイクロベンチマークを使用して、負荷がかかっているサーバー コードをプロファイリングします。

考えられる説明の 1 つは、HEAD が (遅い) データベースまたはファイル システムからデータをロードしていることです。データが既にキャッシュされているため、次の GET は高速になる可能性があります。(サーバー コードでの明示的なキャッシュ、バックエンド データベースでのクエリのキャッシュ、またはファイル システムのキャッシュである可能性があります。) HEAD が前にない場合に GET が遅くなるかどうかを確認することで、これをテストできます。

于 2012-12-05T06:50:10.420 に答える