web-dev-qa-db-ja.com

ブラウザは、異なるサブドメインによって提供される同じファイルを認識しますか?

Cookieのないドメインとして機能するために、Webサイト資産をAmazon S3に保存し、別のドメイン名からCloudFrontによって提供します(したがって、Webサイトの場合はwebsite.com、静的資産の場合はwebsitestatic.com)。はるかに先に設定しますExpiresヘッダーなので、ブラウザーでキャッシュできます。

Google PageSpeedの推奨事項:Parallelize downloads across hostnames。同じCloudFrontディストリビューションを指すサブドメインを追加してこれを達成し、URLをアセットにランダム化することで、media1.websitestatic.commedia2.websitestatic.commedia3.websitestatic.comを取得できます。

私の質問は、異なるサブドメインから提供されている場合、ブラウザは事前にキャッシュされたファイルと同じものとして個々のファイルを認識しますか? media1media2などはすべて同じファイルを提供するため、2ページ以上で同じ画像がmedia1から提供され、次にmedia2 nextで提供される場合、ブラウザはこれを認識しますか、それとも再度ダウンロードしますか?

ファイルを提供するHTMLファイルのサブドメインURLをランダム化できます(media1media4media8など...)ファイルを作成して、毎回同じサブドメインから提供されるようにします。

答えはノーだと思いますが、そうではないので、ランダムなサブドメインを実装する場合、理論的にはすべてのページリクエストで同じファイルに対して異なるサブドメインを取得できるため、キャッシュバージョンを使用する利点を無効にします。

4
Jim

異なるサブドメインから提供されている場合、ブラウザは個々のファイルを事前にキャッシュされたファイルと同じものとして認識しますか?

いいえ。ブラウザ(キャッシュ)に関する限り、異なる場所から提供される2つの同一のファイルは異なるファイルです。

URLは、ブラウザがファイルをキャッシュするためのキーです。

Media1、media2などはすべて同じファイルを提供するため、2ページ以上で同じイメージが最初にmedia1から提供され、次にmedia2が提供された場合、ブラウザはこれを認識しますか、それを再度ダウンロードしますか?

再度ダウンロードされます。

6
MrWhite

ブラウザには、2つの異なるURLが同じファイルであることを知る方法がありません。

あなたが残されている根本的な質問は次のとおりだと思います:ドメインと同じくらい多くのダウンロードを取得せずに複数のドメインでファイルをホストするにはどうすればいいですか(すごい英語ですか?申し訳ありませんがフランス語です)

あなたはあなたのファイルがどこから来たのかを賢く選択することでそれを処理することができます。 2つの一般的な方法:

  • 決定論的アルゴリズムを使用して、選択するドメインを決定します(つまり、ランダムではありません)。たとえば、「すべてのJSが1に、すべてのCSSが2に、残りが3に」、「aで始まるすべてのファイル」 1、「b」2、「c」3、「d」4に進みます...

  • より困難ですが、私が知っているどの言語でも実行可能です:一貫したシャーディングを行います。 URLを取得し、MD5(またはSHA1または適切なハッシュ関数)を適用し、整数にキャストし、所有しているドメインの数でモジュロを取得します。例: "/wp-content/photos/2013/01/cat.jpg" MD5は25d81ba602071aa703c98dfaa452322dにハッシュし、整数50303532743047232046842026848642404426に変換します。2つのドメインが与えられた場合、50303532743047232046842026848642404426%2 = 0。

両方のソリューションを使用すると、ファイルを拡散できますが、すべてのファイルが1つのドメインにのみ移動します。 2番目の解決策は、適切に構造化されたファイル名を持っている場合に優れています。ファイル名が均等に分散されることが保証されるためです。

1
mathieubolla