我有一个控制器动作,可以从数据库中返回图像。这些图像是静态的,它们永远不会更改,只有它们“改变”的时间才是为图像元素分配新ID。
我已经分配了
[OutputCache(CacheProfile = "ProductImages", Duration = 36000000)]
采取行动,
<add name="ProductImages" enabled="true" duration="600000" varyByCustom="ProductImages" varyByParam="" />
在web.config-&gt; system.web-&gt; caching-&gt; outputcacheSettings-&gt; outputCacheProfiles和
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
在system.webserver-&gt; staticContent。
下我构建它,刷新页面,获取图像。我再次刷新页面,图像从缓存中获取。但是,当我更改一行代码时,重建,再次刷新...所有图像都从数据库中重新获取。不仅数以千计的图像存储在数据库中,而且它将部署在Windows Azure中,因此优化非常重要。
请注意,标准的“静态内容”仍然是高速缓存的,例如Site.css和JQuery.js。但是,图像不是什么。
图像访问URL始终是静态的,以形式出现 〜/媒体/图像/ 1a00d817-6525-4d13-82bc-d0f24d26f29c
我不知道如何修复它,因为虽然它在开发期间是可以容忍的,但如果每次我重新部署到Azure时,每个人的图像缓存都会被重置...... 颤抖。
欢迎提出意见!
编辑:
我也尝试在网址末尾添加扩展名(如.jpg),因此浏览器会将其视为静态内容,并添加了
<add extension=".jpg" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" location="Client" duration="365.00:00:00"/>
到system.webserver-&gt; caching-&gt;个人资料,但无济于事。
启用了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
带位置=“任意”的标题(仅在重建时重新请求):
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
答案 0 :(得分:0)
您可以将它们缓存在客户端上,以避免每次都命中服务器:
<add
name="ProductImages"
enabled="true"
duration="600000"
varyByCustom="ProductImages"
varyByParam=""
location="Client"
/>