将散列附加到 js 文件名 vs Cache-Control:no-store

Appending hash to js filenames vs Cache-Control: no-store

我正在阅读这篇 answer 关于如何将资源(例如 JS 或 CSS 文件)的哈希附加到文件名,以便您的浏览器仅在文件发生更改时才下载它, 否则使用缓存版本。

为什么要通过 HTTP 使用它 header Cache-Control: no-cache

在文件名中使用散列意味着您需要确保永远不会缓存包含 <script src="myscript.someHash.js"></script> 标签的 HTML。

为什么不允许使用 no-cache 缓存 HTML(以及所有其他资源)?

这里讨论的是在确保正确性的同时缓存页面的两种不同方法。 This article 很好地描述了它们,因此我将使用它的术语:模式 1 在 HTML 页面上使用 no-cache,但创建了独特的每个版本的静态资产的文件名,并允许它们永久缓存。 模式 2 仅对所有内容使用 no-cache

它们都有效。从性能的角度来看,模式 1 将更胜一筹,因为它的某些页面只有 no-cache。唯一的缺点是构建工作流程更复杂,因为您需要生成唯一的文件名并确保您的 HTML 页面正确链接到它们。幸运的是,许多框架都支持这种工作流程。

您主要担心的似乎是“您需要确保永远不会缓存包含 [static links] 的 HTML”。但它仍然可以被缓存,只是需要在每次使用时重新验证。但模式 2 中的 每个 文件都是如此,因此它不是相对劣势。