2

(エンタープライズ) Web プロジェクトの場合、以前のバージョンの静的ファイルを保持して、プロジェクトがいつ設計変更を実装する準備ができたかを自分で決定できるようにしたいと考えています。私の最初の計画は、次のような静的コンテンツ用のフォルダーを提供することです。

company.com/static/1.0.0/
company.com/static/1.0.0/css/
company.com/static/1.0.0/js/
company.com/static/1.0.0/images/
company.com/static/2.0.0/
company.com/static/2.0.0/css/
company.com/static/2.0.0/js/
company.com/static/2.0.0/images/

これらのフォルダ内の各ファイルには、少なくとも 1 年間、「永久に」キャッシュするキャッシュ ポリシーが必要です。また、リクエスト数を最小限に抑えるために、css ファイルと js ファイルを 1 つに連結する予定です。

次に、フォルダーも提供しcurrentます(最新のリリースバージョンにシンボリックリンクします)

company.com/static/current/
company.com/static/current/css/
company.com/static/current/js/
company.com/static/current/images/

これにより、私の最初の問題 (プロジェクトとサブ Web サイトがコードを特定のバージョンにロックし、準備ができたらいつでもアップグレードできる) が解決されます。

しかし、その後、キャッシングの問題がいくつか見られます。currentリリースごとに変更されるため、キャッシュフォルダーを「ただ」することはできません。そのフォルダのキャッシング ポリシーはどうあるべきですか。

また、リリースごとに、ほとんどの静的ファイルが変更されることはありません。それらを永久にキャッシュし、変更がある場合は名前を変更することは適切ですか?

キャッシュとファイルの変更の間の最善のトレードオフについて知りたいので、ここでアドバイスを探しています。

4

3 に答える 3

1

HTTPキャッシングに注意してください。私は少し前にこれを調べました。 HTTPキャッシングに関する私のブログ記事

于 2012-03-07T10:14:49.380 に答える
1

次の 3 つの方法から選択できます。

  1. リソースのパスをキャッシュ キーとして使用します。つまり、パスが変更された場合、ブラウザはリソースの新しいバージョンをダウンロードする必要があります。この場合、フォルダーはまったく必要ありません。ページのキャッシュ/currentを回避し、リソースへの適切なパスを配置するだけで済みます。.html
  2. ブラウザーを/currentフォルダーのみに向けて、リソースに ETag を追加することができます。この場合、クライアントから別のサーバー要求が行われますが、それは条件付き要求 (つまり、If-None-Matchヘッダー付き) になるため、304 応答を返すことができます (リソース本文なし)。 ) お客様が別のバージョンに移行することを決定するまで。このようなソリューションのもう 1 つの欠点 (複数の顧客が異なるバージョンを使用している場合) は、/currentフォルダーに単一バージョンのデザインしか含まれないことです。
  3. リソースを単一のファイルに連結するため、リソースのバージョンを url の一部として指定できます。/current/js/combined.js?version=1.0.0.0しかし、これは最初のアプローチと大差ありません。

お役に立てれば。

于 2012-03-08T21:36:54.247 に答える
1

Google や Microsoft などが jQuery CDN のキャッシュ ポリシーをどのように実装しているかを調べてみるとよいでしょう。

バージョン管理された URL では、永久にキャッシュするというポリシーは問題ありません。

現在の URL では、明らかに有効期限を短くする必要があります。

考慮すべき点がいくつかあります。

  • アプリケーションは /current/ に対してどのようにテストできますか。つまり、アプリケーションがそれを使用する場合、変更によって既存のアプリケーションが壊れないことをどのように確認できますか?

  • ほとんどのブラウザのキャッシュはファイルを長期間保持するのに十分な大きさではないため、永久にキャッシュすることは、実際には「現在のセッション」中のリクエストを減らすことだけです(人々が他のサイトを閲覧すると削除されます)

于 2012-03-14T10:49:54.267 に答える