大きなサイトが外部ドメインで画像/ CSSをホストしているのはなぜですか?


43

Facebook、Twitter、Googleなどのサイトが画像やCSSを次のような外部ドメインでホストしているのはなぜですか?

  • フェイスブック: static.ak.fbcdn.net
  • ツイッター: a0.twimg.com
  • Google: ssl.gstatic.com

質問:

  • パフォーマンスはありますか?またはセキュリティ?

回答:


53

@toomanyairmilesは部分的に正しいです-この手法の目的は、Webブラウザーからサーバーへの並列接続を許可することです。Webブラウザーは、単一ホストへの最低 2つの同時接続を許可する必要がありますが、多くの新しいブラウザーは最大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でドメイン名を参照します。


13

過去には、Webブラウザーは一度に2つのアイテム(現在は6つ以上)しかダウンロードできなかったため、さまざまなドメインからのリソースのダウンロードは、単一のドメインよりも高速です。これは、画像からjavascriptまですべてに適用されます。

多くの企業は、エンドユーザーが地理的に近いサーバーからデータを取得できるようにするツールであるCDNも使用します。また、リソース要求の往復時間を短縮することでサイトのパフォーマンスを向上させます。




-1

これは、外部ドメイン名を使用するときにCookieが設定されていないときにヘッダーに送信される望ましくないCookieに必要なため、コンテンツの読み込みがはるかに高速です。

はい、それはまだ速度の目的のために必要です。


受け入れられた回答は、Cookieが外部ドメインに送信されないことを既に述べています。この答えは、他の答えがまだカバーしていないことを言っていません。
スティーブンオステルミラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.