1

ソフトウェアの特定のリリースで JavaScript、CSS、および画像ファイルがブラウザにキャッシュされないようにしたいと考えています。

私は Spark ビュー エンジンで ASP.NET MVC3 を使用しています。これが行われるすべてのインスタンスで、仮想パスを使用してレンダリングされるイメージ、スクリプト、およびスタイルシートの URL にカスタム クエリ文字列パラメーターを追加することで、これを実行できると思います。のように、として<script type="text/javascript" src="~/path/to/script.css"></script>レンダリングされ<script type="text/javascript" src="/myApplication/path/to/script.css?2.3.0"></script>ます。

これはできることでしょうか?私は正しい軌道に乗っていますか、それとも他にできることはありますか?

ありがとう!

編集

IIS で ETag を見ていましたが、これでうまくいくようです。少しテストしましたが、うまくいくようです。それは合理的な解決策のように思えますか?

4

2 に答える 2

3

あなたは正しい軌道に乗っています。静的リソースにバージョン番号を追加するだけで、それらを変更するとこの番号が増加します。

このプロセスを自動化できます。クライアント ブラウザからの複数のリクエストを避けるために、静的リソースを 1 つのファイルに結合することをお勧めします。このプロセス中に、バージョン番号または単に結果ファイルのハッシュを追加できます。このようにして、結果のファイルが変更されると、ハッシュも変更されます。

たとえば、Web 最適化フレームワークはチェックアウトできるものであり、これらのタスクを自動化します。

したがってMicrosoft.AspNet.Web.Optimization、アプリケーションに NuGet をインストールしたら、次のようにバンドルを定義できますApplication_Start

var bundles = BundleTable.Bundles;
bundles.Add(
    new ScriptBundle("~/bundles/jquery").Include("~/Scripts/jquery-{version}.js")
);

次に、ビュー内で名前で参照します。

@Scripts.Render("~/bundles/jquery")

debug="false"リリース モード ( web.config 内) で実行している場合、これは次のようにレンダリングされます。

<script src="/bundles/jquery?v=wBUqTIMTmGl9Hj0haQMeRbd8CoM3UaGnAwp4uDEKfnM1"></script>

このフレームワークは、複数の静的リソースを 1 つのバンドルに結合できるため、非常に強力です。また、それらを最小化して帯域幅の消費を最小限に抑えます。また、これらの静的リソースをキャッシュし、コンテンツに基づいてバージョン番号を追加します。したがって、元のコンテンツが変更されると、生成されたバージョン番号が変更され、クライアント ブラウザーのキャッシュから削除されます。

また、このフレームワークには ASP.NET MVC 4 が付属しているため、アプリケーションをアップグレードするときに、これが静的リソースを処理するための既定のメカニズムであるため、何も変更する必要がなくなります。

于 2012-10-10T16:56:39.320 に答える
0

これは確かに 1 つの方法ですが、クエリ文字列をキャッシュ バスターとして使用することは最善の方法ではありません。

もう 1 つの方法は、ブラウザーの URL にタイムスタンプを入れてから、そのサーバー側を書き直すことです。

たとえば、URL 書き換え拡張機能を使用して、次のようなルールを作成します。

<rule name="AutoVersioningOfCSSAndJS" stopProcessing="true">
  <match url="^(.*)\.[\d]{8}\.(css|js)$" ignoreCase="true" />
  <action type="Rewrite" url="{R:1}.{R:2}" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  </conditions>
</rule>

次に、タグを 8 桁のタイムスタンプでレンダリングします。

<script type="text/javascript" src="~/path/to/script.20121010.css"></script>
于 2012-10-10T17:05:29.897 に答える