【发布时间】:2014-12-12 05:02:24
【问题描述】:
在 Steve Souders (at around 14:30) 的演示文稿 "Cache is King" 中,暗示实际上只有两个缓存持续时间应该用于您的资源:“永远”和“从不”(我自己的术语) .
- “永远”意味着您通过设置非常高的最大年龄(例如一年)有效地使资源永久不可变。如果您想在某个时候修改资源,演示文稿建议,您只需将修改后的资源发布到不同的 URL。 (建议部分或全部重命名是必要的,因为 Internet 上有大量配置错误的代理。)
- “从不”表示您有效禁用所有形式的缓存,并要求浏览器在每次请求资源时下载资源。
一方面,Google 首席性能工程师给出的任何性能建议都具有重要意义。另一方面,HTTP 缓存可能是出于某种原因(不仅仅是“永远”和“从不”)设计的可变缓存持续时间,并且仅因为资源已被修改而将 URL 更改为资源似乎违背了HTTP。
你应该在实践中使用“永远”和“从不”唯一的缓存持续时间吗?这是否与网络上的其他最佳做法相冲突?
除了典型的“使用浏览器的用户”用例之外,我还想知道这些原则如何应用于 REST/超媒体 API。
【问题讨论】:
-
我最喜欢的缓存头是
Cache-Control: private, max-age=0,可以选择与ETag组合,等于资源哈希或资源版本。在使用 Ajax 或 RESTful API 的情况下,它会产生最佳效果。例如,请参阅the answer。