浏览器缓存哪些文件?

时间:2014-04-11 10:09:09

标签: javascript angularjs caching browser-cache

我正在使用AngularJs框架开发一个Web应用程序。我目前正试图弄清楚如何防止网络缓存,我这样做是通过在我的文件名前设置哈希。

到目前为止我所看到的是,大多数人只对image,javascript和css文件执行此操作,例如:

http://davidtucker.net/articles/automating-with-grunt/#workflowCache

我的问题是,是否还有其他类型的文件需要考虑? Web浏览器也不会缓存html文件吗?

1 个答案:

答案 0 :(得分:1)

遵循Google Optimizing Caching的指南。

一些关键点:

  • 积极为所有静态资源设置缓存标头。 对于所有可缓存资源,我们建议使用以下设置:

    • 将过期时间设置为最少一个月,最好是一年。 (我们更喜欢Expires over Cache-Control:max-age,因为它受到更广泛的支持。)
    • 将来不要将其设置为超过一年,因为这违反了RFC准则。
    • 如果您确切知道资源何时会发生变化,那么设置较短的过期时间就可以了。但如果你认为它可能很快就会改变"但是不知道什么时候应该设置一个很长的过期时间并使用URL指纹识别(如下所述)。积极地设置缓存不会污染"浏览器缓存:据我们所知,所有浏览器都根据最近最少使用的算法清除缓存;我们不知道任何浏览器在清除它们之前等待资源到期。
  • 将上次修改日期设置为资源更改的最后一次:如果上次修改日期在过去足够远,则浏览器可能会获胜。 t重新获取它。

  • 使用指纹识别来动态启用缓存:对于偶尔更改的资源,您可以让浏览器缓存资源,直到服务器上的资源发生变化,此时服务器会告诉浏览器有新版本。您可以通过在其URL(即文件路径)中嵌入资源指纹来实现此目的。当资源发生变化时,其指纹也会发生变化,反之,其URL也会发生变化。一旦URL更改,浏览器就会被强制重新获取资源。指纹识别允许您在未来很长时间内设置到期日期,即使对于更频繁变化的资源也是如此。当然,这种技术要求所有引用资源的页面都知道指纹URL,这可能是也可能不可行,具体取决于页面的编码方式。

阅读Google的完整文章,了解其他方面,特别是有关互操作性的内容。