3

<script>タグ、css、およびさまざまなグラフィックファイルを介して参照されるJavaScriptを、サイトの特定のリリースのユーザーブラウザーにキャッシュする必要があります。ただし、ファイルの更新をリリースするときは、新しいコンテンツ(Javascript、css、グラフィックスなど)がユーザーのマシンで確実に更新されるようにしたいと思います。

この問題を調査する中で、私はいくつかの可能な解決策に出くわしました。

  1. キャッシュ制御や有効期限などのhttpヘッダーを調整します
  2. 各リソースリクエストに一意のクエリ文字列を追加します
  3. 要求されているリソースのパス(またはファイル名)にバージョン番号を含めます

オプション1に関する私の懸念(一部のコンテンツタイプに実装する方法がわからない場合を除く)は、ブラウザーとIISの間に中間プロキシがある場合、中間プロキシがhttpヘッダーを尊重せず、コンテンツがブラウザとプロキシ。

オプション2に関する私の懸念は2つあります。1つは、乱数またはタイムスタンプを使用するだけの場合、コンテンツが変更されていない場合(リリース間でない場合)でも、ブラウザーはローカルキャッシュをバイパスして、毎回新しいリソースを要求します。この問題の回避策は、リソースファイルのタイムスタンプまたはファイルのハッシュを使用することです。これは、新しいリリースが発生した場合にのみ変更されます。ただし、これは私の2番目の懸念につながります。デフォルトでは、一部のWebプロキシがクエリ文字列で何もキャッシュしないことを理解しています(http://stackoverflow.com/questions/5541340/how-can-i-prevent-javascript-caching- querystring-approach-isnt-working)。これはおそらくカスタマイズ可能ですが、キャッシュのパフォーマンス上の利点を得るために、管理者がデフォルトから設定を変更することに依存したくありません。

オプション3が最良の選択のように思えますが、ASP .NET MVC(現在はASP .NET MVC 3を使用)の場合、実際的な方法で実装する方法がわかりません。手作業で、グラフィック、css、または外部javascriptファイルにリンクするすべてのファイルにアクセスし、リリースごとに異なるバージョン番号を含めるようにパスを変更できますが、これは明らかに面倒でエラーが発生しやすくなります。

私の質問は次のとおりです。

1)(特定のリリースの)キャッシングを回避するために考慮すべき他の戦略はありますか?

2)オプション3(リソースのパスにバージョン番号を含む)を使用すると仮定すると、ASP .NET MVCアプリケーションで、現実的に維持できる方法でこれを実現するにはどうすればよいですか?

ありがとう、

ノートル

4

2 に答える 2

2

アイデアは、js、cssファイルのバージョンが変更されるたびに、サーバーからURLを変更して、ブラウザーが新しいバージョンを要求するようにする必要があるということです。

これについて明確に説明しているこのスレッドの@Kipの回答を参照してください。答えはphpにありますが、asp.netmvc自体に実装できます。

ASP.NET MVC 4の新しいバンドル/ミニファイ機能を使用している場合は、バージョン管理が自動的に行われると思います(ただし、わかりません)。

于 2012-06-20T05:28:13.337 に答える
1

Httpキャッシングは2つの方法で行われます。検証メカニズムおよび有効期限メカニズムによる。

Expirationメカニズムの場合、ヘッダーでexpiresを使用できます(ただし、これは、変更されないことがわかっている静的リソースに適しています)。

検証メカニズムと条件付き取得にはETagが使用されますが、これは問題の完璧なケースのようです。

于 2012-06-19T17:34:12.277 に答える