1

我想通过确保浏览器缓存所有 CSS/JS 来加快我网站的加载时间,正如 Google 的 PageSpeed 工具所推荐的那样。但我想确保访问者拥有最新的 CSS/JS 文件,如果它们已更新并且缓存现在包含旧代码。

从我目前的研究来看,在 CSS/JS url 的末尾添加类似“?459454”的内容很流行。但这不会迫使访问者的浏览器每次都重新下载 CSS/JS 文件吗?

有没有办法设置浏览器缓存的文件,但确保浏览器知道缓存文件的更新版本?

4

4 回答 4

3

如果您使用的是 Apache,您可以使用 mod_pagespeed(之前 symcbean 提到过)来自动执行此操作。

如果您还使用 ModPagespeedLoadFromFile 指令,它会工作得最好,因为它会在检测到资源在磁盘上发生更改时立即创建一个新 URL,但是如果没有它,它会正常工作(它将使用它获取时返回的缓存到期时间重写它的资源)。

如果您使用的是 nginx,则可以使用 ngx_pagespeed。

如果您使用 IIS,您可以使用 IISpeed,它不是 Google 产品,我不知道它的完整功能集。

于 2013-04-04T18:53:06.720 回答
2

版本号可以使用,但您也可以使用 Web 框架或资产构建脚本将文件的哈希附加到文件名:

<script src="script-5054a101c8b164cbfa570d97fe23cc0d.js"></script>

这样一来,一旦您的 HTML 更改以反映这个新版本,浏览器就会下载并缓存您脚本的更新版本。

于 2013-03-25T21:32:21.347 回答
1

正如您所说,将查询字符串附加到资产的 URL,但仅在内容不同时更改它,或者在部署新版本时更改它。

于 2013-03-25T21:31:19.697 回答
0

在 CSS/JS url 的末尾添加类似“?459454”的内容很流行。但这不会迫使访问者的浏览器每次都重新下载 CSS/JS 文件吗?

不,它不会强迫他们每次都下载,但是有很多中间代理忽略可缓存内容上的查询字符串 - 因此有许多工具(包括mod_pagespeed,它根据文件内容自动重写 url,以及内容合并与许多其他很酷的技巧一起飞行)将版本信息移动到路径/文件名中。

如果您只有 .htaccess 类型的访问权限,那么您可以剥离版本信息以直接映射到文件,或使用脚本化的 404 重定向器(但如果您使用缓存反向代理,这可能只是一个好主意) .

于 2013-03-25T21:37:59.057 回答