2

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

每次用户刷新页面时散列大约十几个文件不是很慢吗?

4

3 回答 3

5

就个人而言,我不会散列文件,那是资源的浪费。取而代之的是,我会将最后修改的时间戳添加到 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
于 2011-06-23T21:48:50.167 回答
3

每次都破坏缓存对您的用户来说是残酷的。您多久更改一次这些文件?

无论如何,我建议使用时间戳——比 md5 快得多。

于 2011-06-23T21:46:29.033 回答
2

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

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

于 2011-06-23T21:47:31.537 回答