データベースから画像を返すコントローラー アクションがあります。これらの画像は静的であり、変更されることはありません。「変更」されるのは、画像要素に新しい ID が割り当てられたときだけです。
私は
[OutputCache(CacheProfile = "ProductImages", Duration = 36000000)]
アクションに、
<add name="ProductImages" enabled="true" duration="600000" varyByCustom="ProductImages" varyByParam="" />
web.config->system.web->caching->outputcacheSettings->outputCacheProfiles および
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
system.webserver->staticContent の下。
私はそれを構築し、ページを更新し、画像を取得します。ページを再度更新すると、画像はキャッシュから取得されます。ただし、コード行を変更し、再構築し、再度更新すると、すべての画像がデータベースから再取得されます。データベースには何千もの画像が保存されているだけでなく、Windows Azure に展開される予定であるため、最適化は非常に重要です。
Site.css や JQuery.js などの標準の「静的コンテンツ」はキャッシュされたままになることに注意してください。ただし、そうではないのは画像です。
画像アクセス URL は常に静的で、~/Media/Image/1a00d817-6525-4d13-82bc-d0f24d26f29c の形式で進みます。
開発中には許容範囲内ですが、Azure に再デプロイするたびに全員の画像キャッシュがリセットされると、それを修正する方法がわかりません...震える.
アイデアは大歓迎です!
編集:
また、URL の末尾に拡張子 (.jpg など) を追加しようとしたので、ブラウザーはそれを静的コンテンツと見なし、
<add extension=".jpg" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" location="Client" duration="365.00:00:00"/>
system.webserver->caching->profiles に変更しましたが、役に立ちませんでした。
Darin の提案が有効になっているヘッダー (常に再要求):
Cache-Control:private, max-age=600000
Content-Length:4593
Content-Type:image/jpeg
Date:Tue, 19 Feb 2013 08:55:27 GMT
Expires:Tue, 26 Feb 2013 07:35:26 GMT
Last-Modified:Tue, 19 Feb 2013 08:55:26 GMT
Server:Microsoft-IIS/8.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:4.0
X-Powered-By:ASP.NET
location="Any" のヘッダー (再構築時にのみ再リクエスト):
Cache-Control:public, max-age=600000
Content-Length:21461
Content-Type:image/jpeg
Date:Tue, 19 Feb 2013 08:57:03 GMT
Expires:Tue, 26 Feb 2013 07:37:03 GMT
Last-Modified:Tue, 19 Feb 2013 08:57:03 GMT
Server:Microsoft-IIS/8.0
Vary:*
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:4.0
X-Powered-By:ASP.NET