繁体   English   中英

在浏览器中强制缓存更新

[英]Forcing cache update in browser

我正在使用Minify( https://code.google.com/p/minify/ )压缩并合并约30个CSS文件和约10个JavaScript文件。 我为这些文件创建了一个组配置,基本上是一个带有文件名的数组。

就像一个超级按钮一样工作,除非修改了其中一个脚本:浏览器缓存未及时更新。 我曾经获得每个文件的最后修改时间戳(使用filemtime)以否决浏览器缓存:

$time = '?' . filemtime( $filename );
$output = '<link type="text/css" rel="stylesheet" href="'.$file_path.'?'.$time.'" />';

我可以遍历所有40个文件以获得最新的时间戳,但这是一个非常丑陋的解决方案。 另一种方法是例如让crobjob检查它并将时间戳记写入文件,然后可以将其包括在内。

在我再次发明轮子之前还有其他方法吗?

您可以不只是添加:

src="path/to/file.css?v=<?php date(dmy); ?>"

只是获得$file_path的修改时间...? 就我个人而言,我的文件数量要合理得多(两个或三个),每个文件都使用mtime单独缓存。 做工精美。

我可以建议您一种需要定义重写规则并实现静态文件加载处理程序的方式。 假设它是assethandler.php ,并且是您的重写规则;

RewriteRule ^nocache/(.*?)$ assethandler.php?f=$1 [QSA,L]

在php中,您可以使用Cache-Control和Expires来获取最新文件;

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 01 Jul 1990 05:00:00 GMT"); // past date
readfile('path_to_static_files/' . $_GET['f']);

您的静态文件请求将像;

<script src="nocache/your.js"/>

简而言之,当您向nocache/filename发出请求时,将其作为assethandler.php?f=filename进行处理,并且在此处理程序中,缓存始终处于禁用状态,文件内容用作最新内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM