Facebook、Twitter、Googleなどのサイトが、次のような外部ドメインで画像やCSSをホストしているのはなぜですか?
static.ak.fbcdn.net
a0.twimg.com
ssl.gstatic.com
質問:
@toomanyairmilesはpartialally正しいです-この手法の目的は、Webブラウザーからサーバーへの並列接続を許可することです。 Webブラウザーは、単一ホストへの2つの同時接続のminimumを許可する必要がありますが、多くの新しいブラウザーは最大60を管理できます。 )は主要な速度のボトルネックです。
Googleのリソース から:
HTTP 1.1仕様(セクション8.1.4)では、ブラウザーはホスト名ごとに最大2つの同時接続を許可する必要があると規定しています(ただし、新しいブラウザーはそれ以上を許可します:リストについてはBrowserscopeを参照してください)。 HTMLドキュメントに、1つのホストで許可されている最大数よりも多くのリソース(CSS、JavaScript、画像など)への参照が含まれている場合、ブラウザーはその数のリソースに対するリクエストを発行し、残りをキューに入れます。リクエストの一部が終了するとすぐに、ブラウザはキュー内の次の数のリソースに対するリクエストを発行します。すべてのリソースをダウンロードするまで、プロセスを繰り返します。言い換えると、ページが単一のホストからXを超える外部リソースを参照する場合(Xはホストごとに許可される最大接続数)、ブラウザーはそれらをXごとに順次ダウンロードする必要があり、Xリソースごとに1つのRTTが発生します。往復時間の合計はN/Xです。ここで、Nはホストから取得するリソースの数です。たとえば、ブラウザがホスト名ごとに4つの同時接続を許可し、ページが同じドメインの100個のリソースを参照する場合、4つのリソースごとに1つのRTTが発生し、合計ダウンロード時間は25 RTTになります。
そのため、これを回避する方法は、異なるドメインまたはホストへのリクエストを「分割」することです。
繰り返しますが、同じGoogleリソースから:
ホスト名間での並列化可能なリソースのバランス。画像、CSS、およびその他のバイナリオブジェクトを含むほとんどの静的リソースに対するリクエストは並列化できます。ホスト名全体で、これらすべてのオブジェクトへのリクエストのバランスをできるだけ取ります。それが不可能な場合は、経験則として、すべてのホストで平均より50%以上多くのホストがサービスを提供しないようにしてください。したがって、たとえば、40個のリソースと4つのホストがある場合、各ホストは理想的には10個のリソースを提供する必要があります。最悪の場合、15を超えるホストを提供するホストはありません。100のリソースと4つのホストがある場合、各ホストは25のリソースを提供します。 1人のホストが38を超えるサービスを提供することはできません。
しかし、パズルにはもう1つの要素があります。通常、各リクエストには独自のオーバーヘッドがあり、通常はCookieの形式です。画像、CSS、JavaScriptなどの静的要素はCookieデータを送信する必要がないため、 Cookieのない(サブ)ドメインからそれらを提供する により、ラウンドトリップが高速化されます。
画像、JS、CSSファイルなどの静的コンテンツには、ユーザーがこれらのリソースを操作しないため、Cookieを添付する必要はありません。 Cookieを提供しないドメインから静的リソースを提供することにより、要求の待ち時間を短縮できます。この手法は、頻繁に変更される画像のサムネイルやアクセス頻度の低い画像アーカイブなど、ほとんどキャッシュされない静的コンテンツを大量に参照するページに特に役立ちます。 5つを超える静的リソースを提供するページには、この手法をお勧めします。 (これより少ないリソースを提供するページの場合、余分なドメインを設定するコストは価値がありません。)
静的コンテンツを提供するためにCookieのないドメインを予約するには、新しいドメイン名を登録し、既存のドメインAレコードを指す新しいドメインを指すCNAMEレコードでDNSデータベースを構成します。新しいドメインから静的リソースを提供するようにWebサーバーを構成し、このドメインのどこにもCookieを設定できないようにします。 Webページで、静的リソースのURLでドメイン名を参照します。
過去には、Webブラウザーは一度に2つのアイテム(現在は6つ以上)しかダウンロードできなかったため、さまざまなドメインからのリソースのダウンロードは、単一のドメインよりも高速です。これは、画像からjavascriptまですべてに適用されます。
多くの企業は CDN を使用しています。これは、エンドユーザーが地理的に近いサーバーからデータを取得することを保証するツールです。
大規模なサイトでは、静的コンテンツ(画像、JS、CSSファイル)をコンテンツ配信ネットワークまたはCDNに移動します。コンテンツを地理的に分散した複数のサーバーに展開すると、ユーザーの観点から ページの読み込みが速くなります になります。
CDNには異なるドメイン名があるため、 ドメインシャーディングの利点 も提供します。
2項目の制限はもう問題ではありません。 HTTP仕様の推奨事項ですが、最新のブラウザはすべて、少なくとも 6同時接続 を許可しています。