В PHP я пытаюсь украсть страницу из книги игр Rails (см. «Использование меток времени актива» здесь ):
По умолчанию Rails добавляет активы
метки времени для всех путей активов. это
позволяет установить срок действия кэша
дата актива далеко в
будущее, но все же сможет мгновенно
лишить законной силы, просто обновляя
файл (и, следовательно, обновление
отметка времени, которая затем обновляет URL
поскольку временная метка является частью этого,
который в свою очередь перебивает кэш).
Это ответственность Интернета
сервер, который вы используете, чтобы установить далекое будущее
срок действия активов кэша, которые
вам нужно воспользоваться этим
особенность. Вот пример для Apache:
# Asset Expiration
ExpiresActive On
<FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
ExpiresDefault "access plus 1 year"
</FilesMatch>
Если вы посмотрите на источник для страницы Rails, вы увидите, что они означают: путь к таблице стилей может быть "/stylesheets/scaffold.css?1268228124"
, где числа в конце - это отметка времени, когда файл последний раз обновлялся.
Так что это должно работать так:
- Браузер говорит «дай мне эту страницу»
- Сервер говорит: «Здесь, и, кстати, эта таблица стилей с именем
scaffold.css?1268228124
может храниться в кэше в течение года - она не изменится».
- При перезагрузке браузер говорит: «Я не запрашиваю этот файл css, потому что моя локальная копия все еще в порядке».
- Месяц спустя вы редактируете и сохраняете файл, который изменяет временную метку, что означает, что файл больше не называется
scaffold.css?1268228124
, поскольку номера меняются.
- Когда браузер видит это, он говорит: «Я никогда не видел этот файл! Дайте мне копию, пожалуйста. Кеш «обанкротился».
Я думаю, это блестяще. Поэтому я написал функцию, которая выплевывает теги таблиц стилей и JavaScript с временными метками, добавленными к именам файлов, и настроил Apache с помощью приведенного выше выражения.
Теперь: как узнать, работают ли кэширование и очистка кэша?
Я проверяю свои страницы с помощью двух плагинов для Firebug: Yslow и Google Page Speed. Оба, кажется, говорят, что мои файлы кэшируются: проверяются «Добавить заголовки истечения» в Yslow и «использовать кэширование браузера» в Page Speed.
Но когда я смотрю на Page Speed Activity, я вижу много запросов и ожиданий, и никаких «попаданий в кеш».
Если я меняю свою таблицу стилей и перезагружаюсь, я сразу же вижу изменение. Но я не знаю, связано ли это с тем, что браузер вообще никогда не кэшировался или потому, что кеш отключен.
Как я могу сказать?
Обновление: все работает!
Если кому-то интересно, я просто написал пост в блоге, объясняющий детали .