Имам действие на контролера, което връща изображения от база данни. Тези изображения са статични, те никога няма да се променят и единственият път, когато се „променят“, е когато на елемента на изображението бъде присвоен нов идентификатор.
Назначих a
[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
Заглавки с местоположение = "Всички" (повторно заявяване само при повторно изграждане):
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