Хэш CSS и JS файлы, чтобы сломать кэш. Это медленно?
У меня есть сценарий, который генерирует шаблоны страницы. Кроме того, этот сценарий оказывает <script>
а также <link rel='stylesheet'>
теги в HTML.
Я хотел бы добавить функцию разрушения кэша с параметром "? 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
Разве это не медленно, хэшировать около десятка файлов каждый раз, когда пользователь обновляет страницу?
3 ответа
Жестоко для ваших пользователей каждый раз ломать кеш. Как часто вы меняете эти файлы?
В любом случае, я бы предложил использовать метку времени - намного быстрее, чем md5.
Лично я не стал бы хэшировать файл, это пустая трата ресурсов. Вместо этого я бы добавил последнюю модифицированную метку времени в 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
В зависимости от того, как вы обновляете свой сайт, вам, вероятно, следует использовать вместо него дату изменения.
Однако, если вы всегда повторно загружаете каждый файл, это не очень хорошая идея.
Тем не менее, вы должны иметь возможность кэшировать хеш в памяти (и, возможно, также проверить метку времени)