我使用gtmetrix.com来检查我的小网站。网站不是关键的东西。我只想更多地了解性能优化。 我需要优化的最后一件事是浏览器缓存。 我已经阅读并尝试了不同的东西,但无论我仍然得到这些警告。利用浏览器缓存以获取以下可缓存资源:
它是一个在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天后过期。为什么这不够好?使用其他性能检查工具时,我得到了相同的结果。
答案 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会建议您使用网址指纹识别并在其上使用更长的缓存。