利用Azure上的MVC站点的浏览器缓存

时间:2017-09-09 10:26:59

标签: asp.net-mvc azure caching browser-cache

我使用gtmetrix.com来检查我的小网站。网站不是关键的东西。我只想更多地了解性能优化。 我需要优化的最后一件事是浏览器缓存。 我已经阅读并尝试了不同的东西,但无论我仍然得到这些警告。利用浏览器缓存以获取以下可缓存资源:

enter image description here

它是一个在Azure上托管的全新MVC网站。 在我的web.config中,我添加了这个:

1

我的控制器操作看起来像这样

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <add name="CacheFor60Seconds" duration="360" location="Any"/>
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

<staticContent>
  <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="3.00:00:00" />
</staticContent>

据我所知,资源将在2小时或3天后过期。为什么这不够好?使用其他性能检查工具时,我得到了相同的结果。

2 个答案:

答案 0 :(得分:2)

您正在缓存MVC控制器操作的结果(因此查看)60秒。警告都是关于静态内容,您似乎正在使用clientCache元素进行寻址。

首先想到的是使用Azure CDN进行缓存和更快速的传送。

使用web.config中的clientCache element of the staticContent element来缓存静态内容通常应该可以正常工作,但是众所周知并不总能阻止他们讨价还价。通常,这是配置问题。请阅读我链接的文章,因为它有提示和提示,如

  

要使用httpExpires属性,需要将cacheControlMode属性的值设置为UseExpires

  

httpExpires属性的值必须是完全格式化的日期和时间,遵循RFC 1123中的规范

为什么这不够好?

为什么这个不够好的问题可能最好由gtmetrix.com上的人来回答,因为它是他们的门槛。我可以想象他们有一些提示&amp;提高你的成绩的技巧?

您可能希望增加MaxAge以缓存静态内容,并向静态内容添加(虚构)版本号,例如some_stylesheet.css?ver=3。通过这种方式,它可以缓存较长时间,您可以通过增加版本号来强制浏览器尽快获取该文件的新版本,例如some_stylesheet.css?ver=4

Mads Kristensen在这里发表了一篇有趣的文章,使用指纹识别:Cache busting in ASP.NET

答案 1 :(得分:2)

正如Rick在答案中指出的那样,您的控制器代码只缓存该操作的视图,因此代码与.jpg/.js文件并不真正相关。

您的静态内容的web.config设置正确设置了要缓存3天的所有静态内容。

analytics.js文件仅显示2小时的原因是您最有可能从外部来源(例如来自谷歌)获取该文件,因此直至其缓存设置。您无法更改缓存设置。

如果您想尝试修复2小时,请参阅此问题:PageSpeed Insights 99/100 because of Google Analytics - How can I cache GA?

关于为什么这不够好的问题,答案是我害怕它取决于内容。

您应该专注于尽可能长时间地保留静态内容,因为多次下载相同的媒体并不是最适合您的连接,特别是如果您使用的是移动设备等。因此,大幅改变的图像可能会有一年的缓存时间。如果您使用Google PageSpeed Tools they recommend at least a week。 (GTmetrix使用PageSpeed和YSlow来检查性能)

  

我们建议静态资产或不经常更改的资产的最短缓存时间为一周,最好为一年。如果您需要精确控制何时资源无效,我们建议您使用URL指纹识别或版本控制技术 - 请参阅上面的无效和更新缓存响应链接。

正如Rick所示,如果您的内容经常更改,PageSpeed会建议您使用网址指纹识别并在其上使用更长的缓存。

相关问题