【问题标题】:How to trigger browser html refresh for cached html files?如何为缓存的 html 文件触发浏览器 html 刷新?
【发布时间】:2012-01-28 17:29:48
【问题描述】:

YSLOW 建议:对于静态组件:通过设置远期 Expires 标头来实施“永不过期”策略....如果您使用远期 Expires 标头,则必须在组件更改时更改组件的文件名。在雅虎!我们经常将此步骤作为构建过程的一部分:版本号嵌入在组件的文件名中,例如 yahoo_2.0.6.js。 http://developer.yahoo.com/performance/rules.html

我想为我的大部分静态页面利用缓存,并在版本 # 更改时重新加载 js 文件。我为我的 .js 文件设置了版本号,但我的 main.html 页面将 Expires 设置为未来,因此它不会重新加载,因此不会重新加载 js 文件。理想情况下,我想告诉浏览器(使用通灵技术)在发布新版本的站点时重新加载 main.html。我可以让我的 main.html 页面总是重新加载,但是我失去了缓存的好处。我不是在寻找 ctrl-F5 答案,因为这需要为我们的用户自动发生。

我认为答案是:main.html 不能被缓存,但我想听听其他人正在做什么来解决这个问题。您如何获得最佳的缓存与重新加载优势。

谢谢。

【问题讨论】:

  • 我认为你是对的 - main.html 无法缓存。或者至少不是整个页面。
  • 确保您的服务器支持 304 Not Modified,因此如果页面未更改,至少无需重新下载任何内容。如果你想要更多,你可以查看 html5 的 appcache。这就是你想要的技巧,但如果 appcache 发生了变化,你需要一些 JS 来“重新加载”页面。否则页面将在下次请求页面时更新。我刚才说的可能对你没有多大意义。

标签: html yslow pagespeed http-caching expires-header


【解决方案1】:

您的分析是正确的。 Web 性能最佳实践建议 静态 组件(即不经常更改的组件)的过期日期很远,并且在 URL 中使用版本号可以很好地管理这些更改。

对于主页 (main.html),您不会设置一个遥远的未来到期日期。相反,您不能设置过期时间,或将其设置为最短时间,例如 +24 小时。

【讨论】:

    【解决方案2】:

    猜测这取决于您为什么要缓存 HTML 页面 - 以改善用户加载时间或减少服务器负载。

    即使过期时间很长,您也可能会发现它实际上并没有在客户端缓存很长时间(雅虎研究表明文件不会在缓存中保存很长时间),因此过期时间更短,例如1 天,可能不是问题。

    如果是为了减少后端负载,可能值得看看像 Varnish 这样的代理是否会有所帮助,即它会缓存来自原始服务器的页面,以便在请求时为它们提供服务。通过这种方式,您可以通过更精细的控制来控制页面的缓存时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-29
      • 2018-02-16
      • 2017-09-18
      • 1970-01-01
      • 2014-07-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多