4

我刚刚搜索了网络,但找不到一个好的答案:

FF 的 Google 页面速度扩展告诉我在我的网站 (PHP) 上缓存文件。因此,我更新了我的.htaccess(在我的网站测试版区域)以缓存某些类型的文件:

ExpiresActive On
ExpiresDefault A0
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>

在 beta 区域编码时,我注意到由于缓存控制设置,我需要按F5以获取最新的 .css 文件。这对我来说还不错……但是用户呢?

那么,当我更新我的网站(或文件过期)时,我可以告诉浏览器(仅)重新下载所有文件,如果没有,则使用缓存?

如果我可以告诉浏览器:“嘿,更新时间之前的所有文件都是旧的,请重新下载它们 - 但是更新时间之后的文件还可以,使用缓存。”

4

2 回答 2

6

这是我有时使用的一种简单方法,不需要任何复杂的配置。

每当您修改 css 或 javascript 文件时,只需在标记中添加一个虚拟参数即可。我通常使用当前日期和/或时间。例如:

<link type="text/css" rel="stylesheet" href="site.css?120911" />

这会在您需要更新文件时强制浏览器下载文件的新副本,同时仍允许您在后台保持一致的文件名。

于 2011-12-10T05:01:50.810 回答
2

出于性能原因,您已向浏览器指示它应该缓存文件,而不是在很长一段时间内从服务器请求它。

这就是浏览器正在做的事情:使用缓存中的文件,而不是向服务器询问任何内容——这是正确的行为。


当您修改文件时,为了强制浏览器重新请求它并获取新版本,您唯一的解决方案就是更改其 URL

通常,这是通过在文件名中集成版本号来完成的:

http://www.yoursite.com/my-file-123.css

并且,当文件更新时:

http://www.yoursite.com/my-file-124.css

由于 URL 已更改,浏览器的缓存中没有该文件,并从服务器请求新版本。


当然,手工做这件事并不容易,而且容易出错......

因此,通常(假设您有一个构建脚本,它从源代码控制中提取您网站的源代码,并将它们打包用于生产),您将将此过程集成到您网站的构建脚本中。

于 2011-02-25T18:46:59.937 回答