Duke Dumont - Ocean Drive

Избавляемся от браузерного кэша



Существует множество браузерных расширений для очистки кеша, но бывают случаи когда они не работают или просто не установлены. К примеру вы обновили сайт, а ваши пользователи ничего нового не видят.

Как же сделать чтобы файлы стилей и скриптов были актуальными и сбрасывался кеш браузера? Самое просто решение — добавить get-параметр:

<link href="/style.min.css?1" rel="stylesheet" type="text/css" />

Отлично, теперь сайт обновлен у всех, но что если у вас вышло еще одно обновление? Единица в параметрах больше не работает, она тоже закешировалась, легко исправим:

<link href="/style.min.css?2" rel="stylesheet" type="text/css" />

Все хорошо, но может и надоесть менять цифры каждый раз не правда ли? И в этом случае есть выход, поставим динамический параметр — текущую дату и время в формате unix, с помошью php-функции time:

<link href="/style.min.css?<?= time() ?>" rel="stylesheet" type="text/css" />

Теперь при каждой загрузке файла стилей у пользователя будут актуальные данные в обход кеша. Замечательно, однако совсем избавляться от браузерного кеша не стоит, так как он значительно ускоряет загрузку сайта и уменьшает трафик. Так быть или не быть кешу? Пойдем хитрым путем и будем подставлять новый параметр только тогда, когда сам файл будет обновлен, для этого в качестве параметра укажем дату изменения файла:

<link href="/style.min.css?<?= file_exists('/style.min.css') ?  filemtime('/style.min.css') : time() ?>" rel="stylesheet" type="text/css" />

В этом случае у пользователя будет работать браузерный кеш, а в случае изменений в файле изменится get-параметр и кеш будет сброшен. Такое решение работает для любых файлов будь то css, javascript или изображение.