首页 > 解决方案 > URL 中的版本查询以绕过浏览器缓存

问题描述

我正在编写一个可能会经常更新的 Web 应用程序,包括对 css 和 js 文件的更改,这些文件通常会被浏览器积极缓存。

为了使更改立即对用户可见,而不影响缓存性能,我提出了以下系统:

每个资源文件都有一个版本。这个版本附加了一个?符号,例如 main.css 变为 main.css?v=147。如果我更改文件,我会在所有引用中增加版本。(实际上,每次我部署更新时,我可能只需要一个脚本来增加所有资源的版本。)

我的问题是:

  1. 这是生产代码的合理方法吗?我错过了什么吗?(或者,还有更好的方法?)
  2. 问号是否会引入额外的开销?如果这样更有效,我可以将版本号合并到文件名中。

标签: webbrowser-cache

解决方案


这种方法听起来很合理。以下是需要考虑的几点:

  • 如果您有许多具有不同版本号的不同资源文件,那么开发人员要正确管理所有这些并在正确的情况下增加它们可能会产生相当大的开销。
    • 您可能需要为您的团队实施一项政策
    • 或编写一个 CI 任务来检查开发人员是否做对了
  • 您可以为所有文件使用一个版本号。例如,当您拥有整个应用程序的版本号时,您可以使用它。
    • 它使为开发人员“管理”版本成为一项无操作。
    • 它会更改每次部署的链接

根据您必须管理部署频率与更改资源文件的部署频率以及对这些资源文件的请求数量的资源文件数量,一种或另一种解决方案的性能可能更高。这是一个权衡的问题。


推荐阅读