我想通过确保浏览器缓存所有 CSS/JS 来加快我网站的加载时间,正如 Google 的 PageSpeed 工具所推荐的那样。但我想确保访问者拥有最新的 CSS/JS 文件,如果它们已更新并且缓存现在包含旧代码。
从我目前的研究来看,在 CSS/JS url 的末尾添加类似“?459454”的内容很流行。但这不会迫使访问者的浏览器每次都重新下载 CSS/JS 文件吗?
有没有办法设置浏览器缓存的文件,但确保浏览器知道缓存文件的更新版本?
如果您使用的是 Apache,您可以使用 mod_pagespeed(之前 symcbean 提到过)来自动执行此操作。
如果您还使用 ModPagespeedLoadFromFile 指令,它会工作得最好,因为它会在检测到资源在磁盘上发生更改时立即创建一个新 URL,但是如果没有它,它会正常工作(它将使用它获取时返回的缓存到期时间重写它的资源)。
如果您使用的是 nginx,则可以使用 ngx_pagespeed。
如果您使用 IIS,您可以使用 IISpeed,它不是 Google 产品,我不知道它的完整功能集。
版本号可以使用,但您也可以使用 Web 框架或资产构建脚本将文件的哈希附加到文件名:
<script src="script-5054a101c8b164cbfa570d97fe23cc0d.js"></script>
这样一来,一旦您的 HTML 更改以反映这个新版本,浏览器就会下载并缓存您脚本的更新版本。
正如您所说,将查询字符串附加到资产的 URL,但仅在内容不同时更改它,或者在部署新版本时更改它。
在 CSS/JS url 的末尾添加类似“?459454”的内容很流行。但这不会迫使访问者的浏览器每次都重新下载 CSS/JS 文件吗?
不,它不会强迫他们每次都下载,但是有很多中间代理忽略可缓存内容上的查询字符串 - 因此有许多工具(包括mod_pagespeed,它根据文件内容自动重写 url,以及内容合并与许多其他很酷的技巧一起飞行)将版本信息移动到路径/文件名中。
如果您只有 .htaccess 类型的访问权限,那么您可以剥离版本信息以直接映射到文件,或使用脚本化的 404 重定向器(但如果您使用缓存反向代理,这可能只是一个好主意) .