26

画像、css、およびjavascriptを、Webページをロードするときにクライアント側でブラウザにキャッシュしたいと思います。asp.net mvcで使用するキャッシュには、さまざまな種類があります。

ブラウザにこれらのファイルの新しいバージョンまたは変更されたバージョンをチェックさせることも可能でしょうか?

ありがとう!

4

6 に答える 6

47

サーバーにキャッシュ制御ヘッダーを設定する必要があります。これを行うには、web.configにこれを貼り付けます。

<system.webServer>
  <staticContent>
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
  </staticContent>
</system.webServer>

これにより、ブラウザは30日間静的なもので新しいコンテンツをチェックするようになります。

2番目の質問では、コンテンツにクエリ文字列を追加するメカニズムを提供します。私の現在のプロジェクトでは、ビルドの一部としてjavascriptとcssを圧縮して結合します。ページにリンクを配置すると、次のようになります。

<script src="/Resources/Javascript/Combined.js?v=2.2.0.1901" type="text/javascript"></script>

クエリ文字列はMajor.Minor.0.Changeset番号であり、ビルドをプッシュするたびに変更され、クライアントがそれを再フェッチします。同じことが、<link>要素のスタイルシートでも発生します。

于 2010-01-20T22:32:04.280 に答える
6

実際、ブラウザはこれを自動的に処理します。css、js、html、および画像をキャッシュしないようにするには、邪魔にならないようにする必要があります。

私はASP MVCにはあまり詳しくありませんが、あなたが考えているキャッシングのタイプは、作成された動的出力サーバー側のオペコードキャッシングだと思いますか?

于 2010-01-20T22:25:44.763 に答える
4

@Paul Creaseyと@Salsaはどちらも正しいので、リンクが同じである限り、ブラウザはデフォルトでキャッシュを処理します。

あなたが言ったように、クライアントのブラウザが更新されたバージョンをチェックするという保証がないので、これらのファイルを更新する必要があるときにこれは問題を引き起こします。多くの場合、これは一定の時間が経過した後にのみ実行されるため、ユーザーエクスペリエンスが低下する可能性があります。

キャッシュを更新するようにクライアントブラウザに警告する方法について、このサイトですでに多くの質問があります。つまり、ファイルの内容を変更するときに、それらはすべてリンクの変更に依存しています。

次のようなキャッシュ目的でのみ使用されるパラメータをURLに追加できます。

<script src="/myJavascript.js?version=4"></script>

次に、コンテンツを変更するときにバージョン番号を変更するだけで、この回答でクライアント側を強制的に更新する必要があります。

于 2010-01-20T22:32:24.627 に答える
2

ここに投稿した回答を見て、キャッシュを使用する利点を最大化し、ユーザーが「ハード」リフレッシュ ( Ctrl+ )する必要がある問題を回避するソリューションを確認してくださいF5

URL でコンテンツ自体の MD5 ハッシュを使用するため、ファイルが同じである限り URL は同じままです。これが実際の目標です。ハッシュの計算は非常に高速で、サーバーのメモリにキャッシュされるため、ページのレンダリングが著しく遅くなることはありません。すべてがマイクロ秒単位で測定され、その利点は (私のスキューバ ダイバー向けサイトで) これまでのところ素晴らしいものです。私のサイトではまだサーバー生成されていないため、CSS ファイル内の画像を除いて、すべての画像、CSS、および JS に適用します。

于 2011-06-22T15:24:56.607 に答える
0

これは、IISまたは構成ファイルで行うのが最適です。CSS/ JS/imagesが期限切れにならないように設定されていることを確認してください。

コードからそれらを参照するときは、ファイル名にバージョンまたはビルド日付を追加することをお勧めします(例:script.js?20100120)。そうすれば、それらを変更する場合は、バージョンを変更するだけで強制的に更新できます。それをキャッシュしたすべてのブラウザから。

于 2010-01-20T22:33:45.810 に答える
-2

Cache-Control ヘッダーを適切に設定 し、web.config を設定すると、クライアント側のキャッシュはブラウザーによって自動的に処理されます。そのように:

<system.webServer>
    <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00.00:10:00" />
    </staticContent>
</system.webServer>
于 2010-01-20T22:26:08.103 に答える