web - URL 中的版本查询以绕过浏览器缓存
问题描述
我正在编写一个可能会经常更新的 Web 应用程序,包括对 css 和 js 文件的更改,这些文件通常会被浏览器积极缓存。
为了使更改立即对用户可见,而不影响缓存性能,我提出了以下系统:
每个资源文件都有一个版本。这个版本附加了一个?符号,例如 main.css 变为 main.css?v=147。如果我更改文件,我会在所有引用中增加版本。(实际上,每次我部署更新时,我可能只需要一个脚本来增加所有资源的版本。)
我的问题是:
- 这是生产代码的合理方法吗?我错过了什么吗?(或者,还有更好的方法?)
- 问号是否会引入额外的开销?如果这样更有效,我可以将版本号合并到文件名中。
解决方案
这种方法听起来很合理。以下是需要考虑的几点:
- 如果您有许多具有不同版本号的不同资源文件,那么开发人员要正确管理所有这些并在正确的情况下增加它们可能会产生相当大的开销。
- 您可能需要为您的团队实施一项政策
- 或编写一个 CI 任务来检查开发人员是否做对了
- 您可以为所有文件使用一个版本号。例如,当您拥有整个应用程序的版本号时,您可以使用它。
- 它使为开发人员“管理”版本成为一项无操作。
- 它会更改每次部署的链接
根据您必须管理部署频率与更改资源文件的部署频率以及对这些资源文件的请求数量的资源文件数量,一种或另一种解决方案的性能可能更高。这是一个权衡的问题。
推荐阅读
- amazon-s3 - 在 EC2 中运行时,Flink 未从 S3 读取文件
- c# - 确保在 UI 线程上创建新表单
- video - 什么是 I 帧,它们会影响视频大小吗?
- angular - TypeError: changes.payload.docChanges is not a function in Angular 6 using AngularFire2 v5-rc9
- android - TexInputLayout 错误消息未设置
- selenium - 每次节点被杀死时,Selenium Grid 都会重新启动
- php - Foreach ,并通过 ID 获取名称不返回任何内容
- r - R合并循环
- python - 函数中的Python变量重新定义
- javascript - 反应在单击时复制呈现的 div