散列css和js文件以破坏缓存.它慢吗


hash css and js files to break cache. Is it slow?

我有一些脚本可以生成页面的模板。此外,此脚本在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快得多。

根据您更新网站的方式,您可能应该使用修改后的日期。

然而,如果你总是重新上传每个文件,这不是一个好主意
但是,您应该能够将散列缓存在内存中(也许还可以检查时间戳)