问题
I have some script that generates templates of a page. Also, this scripts renders <script>
and <link rel='stylesheet'>
tags in the HTML.
I'd like to add cache-breaking feature with "?v=xxxxx" parameter.
I do it in such a way:
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
Isn't it slow, to hash about a dozen files every time user refreshes the page?
回答1:
That's cruel to your users to break the cache every time. How often do you change those files?
At any rate, I would suggest using a timestamp-- far faster than md5.
回答2:
Personally, I wouldn't hash the file, that's a waste of resources. Instead of it, i would add the last-modified timestamp into the v?=.... I mean something like this:
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
回答3:
Depending on how you update your site, you should probably use the date modified instead.
However, if you always re-upload every file, this is not a good idea.
However, you should then be able to cache the hash in memory (and perhaps also check the timestamp)
来源:https://stackoverflow.com/questions/6460967/hash-css-and-js-files-to-break-cache-is-it-slow