1

複数の小さなサイズのファイルを複数のHTTPリクエストでリクエストするか、大きなファイルを一度にリクエストするか、どちらがより良いアプローチなのか疑問に思っていました

ネット上で矛盾した検索結果が得られるため、両方のアプローチの長所と短所も提供してください。

4

3 に答える 3

6

Yahoo ページのヒントの 1 つは、HTTP 要求を最小限に抑えることです。

http://developer.yahoo.com/performance/rules.html#num_http

主な理由は、各リクエストに余分なオーバーヘッドが 1 つあるためです。ヤフーが言うように:

エンドユーザーの応答時間の 80% がフロントエンドで費やされます。この時間のほとんどは、ページ内のすべてのコンポーネント (画像、スタイルシート、スクリプト、Flash など) のダウンロードに費やされます。コンポーネントの数を減らすと、ページのレンダリングに必要な HTTP リクエストの数が減ります。これは、ページを高速化するための鍵です。

ASP.Net に特化

すべての ASP.Net 呼び出しで、ページ要求全体のセッション ロックも行います。これが意味することは、現在のページが終了するまでセッションがページの残りをロックしているため、すべてのユーザーのすべてのリクエストが互いに待機する必要があるということです。

それは悪いように聞こえますが、セッションだけでなく、すべてのデータの同期に大いに役立つため、開始サイトや小規模なサイトには非常に役立ちます。

したがって、複数の呼び出しでは、データを取得するシーケンスがあり、並行してデータを取得することはありません。

参考:WebサービスへのjQuery Ajax呼び出しは同期しているようです

ASP.Net のセッションを完全に置き換える

Cookie のオーバーヘッド

リクエストごとに、ブラウザからサーバーに移動する Cookie もあります。したがって、Cookie が 500 バイト近くあり、100 回の呼び出しを行うと、移動するデータが 50KB 余分に発生します。これは、Cookie を使用しないドメインを使用して解決できますが、このオプションがない場合は、次のことは呼び出しを減らすことです。

参考:http ://developer.yahoo.com/performance/rules.html#cookie_free

スプライト

スプライトやその他の画像を含む 1 つのファイル画像に対して、ダウンロードしてブラウザーに表示する画像が多数ある場合、ブラウザーは、来るすべての画像の各部分を再レンダリングするため、レンダリング時間を短縮できます。しかし、画像が 1 つのスプライト ファイルに含まれている場合、ブラウザーはそれらをレンダリングするために 1 つのアクションのみを実行します。

スクリプトと CSS

ここも同じです。すべての JavaScript を 1 つまたは 2 つのファイルに結合すると、ブラウザはそれを取得して一度に解析できます。同じ数のファイルがある場合、ブラウザはそれらを 1 つずつ解析する必要があります。さらに、JavaScript ファイルを gzip 圧縮すると、多数の小さなファイルを保持するよりもはるかに優れたものになります。

より多くのリクエストを使用する場合

私にとっては、このデータがユーザーの操作に伴う可能性がある場合、ajax を使用してより多くのデータを要求できます。これは、最初の要求で回避できる追加のデータベース呼び出しと計算を要求する情報である可能性があり、ユーザーが実際にそれらを要求することはないかもしれません。

リクエストをそのように分割して、ユーザーがリクエストしたときにのみ追加のデータを取得できます。このようにすると、データベース呼び出しが削減されます。

たとえば、Amazon のページでは、カルーセル コントロールは、カルーセルで追加のアイテムを要求した場合にのみ追加のアイテムをロードしたり、ページを下に移動した場合にのみユーザー履歴を表示したりします。

于 2012-06-13T08:52:12.613 に答える
3

私は全体の状況を知りません。あなたが「大きなファイル」をどのように定義するかはわかりませんが、頭の中で次のように述べています。

1 つの大きなファイル

  • +潜在的に大きな圧縮率
  • +サーバーへのラウンドトリップが少ない
  • -ダウンロードするデータが増える

いくつかの小さなファイル

  • +クライアントはすでにそれらのいくつかを持っている可能性があるため、送信するデータが少なくなります
  • -サーバーへの往復回数が増える
于 2012-06-13T08:53:38.390 に答える
1

誰かが文脈のない自由回答式の質問をするときはいつものように、「場合による」。

大量のデータをネットワーク経由で一度に送信する場合、それを小さなチャンクに分割すると、オーバーヘッドが増えるだけです。圧縮は一般に、より大きなデータに対してより適切に機能し、各要求のオーバーヘッドは重要であり、サーバーへの単一のデータ ストリームを作成して維持することには利点があります。

ただし、この ASP.NET にタグを付けたので、典型的な Web ページ データについて話していると考えるのが妥当です。多くの場合、そのデータは、スタイルシート、スクリプト、ページ コンテンツ、画像などの用途ごとに個別のファイルに分割されます。

これには便利な理由があります。開発者としては、1 種類のコンテンツしか持たないファイルを扱う方が簡単です。技術的には、HTML ファイルのマークアップ内にすべての画像ファイルをバイナリ データとして埋め込むことができますが、それでは画像の編集がかなり難しくなります。

パフォーマンスの面では、ファイルが小さいほど最初の転送がわずかに遅くなりますが、通常はその後の転送の速度が向上します。ほとんどのクライアント ブラウザは個々のファイルをキャッシュし、それらのファイルを繰り返しダウンロードすることはありません。コンテンツを小さなファイルに分割し、それらのファイルを複数のページで再利用することにより、特定のデータ スライスが複数のリクエストでダウンロードされる回数を減らします。このように、再利用可能なコンテンツを小さなファイルに分割することで、サイト全体のパフォーマンスを向上させることができます。

于 2012-06-13T09:02:55.447 に答える