У меня есть сценарий, который генерирует шаблоны страницы. Кроме того, эти сценарии отображают теги <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
Разве это не медленно, хешировать около дюжины файлов каждый раз, когда пользователь обновляет страницу?
Для ваших пользователей жестоко нарушать кеш каждый раз. Как часто вы меняете эти файлы?
Во всяком случае, я бы предложил использовать временную метку – намного быстрее, чем 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
В зависимости от того, как вы обновляете свой сайт, скорее всего, вы должны использовать вместо него дату изменения.
Однако, если вы всегда загружаете каждый файл, это не очень хорошая идея.
Тем не менее, вы должны иметь возможность кэшировать хэш в памяти (и, возможно, также проверять метку времени)