我有一些脚本可以生成页面的模板。此外,此脚本在HTML中呈现<script>
和<link rel='stylesheet'>
标记。
我想添加带有"?v=xxxxx"参数的缓存中断功能。
我是这样做的:
foreach ($scripts as &$script) {
// get script file name
$script = "{$this->_js_folder}/{$script}";
// get it's realpath
$realfile = realpath(substr($script,1));
// hashing the file
$hash = md5_file($realfile);
// adding cache-breaking number
$script .= '?v='.$hash;
} //: foreach
每次用户刷新页面时都要散列十几个文件,这不是很慢吗?
就我个人而言,我不会对文件进行哈希处理,这是浪费资源。相反,我会将最后修改的时间戳添加到v?=…中。。。。我的意思是:
foreach ($scripts as &$script) {
// get script file name
$script = "{$this->_js_folder}/{$script}";
// get it's realpath
$realfile = realpath(substr($script,1));
// getting last modified timestamp
$timestamp = filemtime($realfile);
// adding cache-breaking number
$script .= '?v='.$timestamp;
} //: foreach
每次都破坏缓存对用户来说太残忍了。你多久更改一次这些文件?
无论如何,我建议使用时间戳——比md5快得多。
根据您更新网站的方式,您可能应该使用修改后的日期。
然而,如果你总是重新上传每个文件,这不是一个好主意
但是,您应该能够将散列缓存在内存中(也许还可以检查时间戳)