«Кэшированные войны» или как убрать ненужное

Опубликовано Опубликовано в рубрике Easy Patch, PHP

В процессе работы над одним из своих проектов я столкнулся с необходимостью принудительной очистки кэша. Но вот беда — на одной странице во вложении динамически подгружались картинки, которые при перелистывании этого самого внутреннего вложения кэшировались и не давали спокойно жить.

Стоит оговориться, что картинки были крайне маленькие.

Решение нашлось своеобразное. Drupal привычно ругнулся на ошибку объявления заголовков. Конечно, можно было бы вписать нужные header-ы в файлик common.inc, но я поступил проще.

Единственный шаг «на удачу» был в том, что я не знал содержания файла настроек хостинга, которые могли помешать процедуре танцев с бубнами. Однако мне повезло, и всё оказалось в порядке. Скажу по секрету, что хостинг был sweb.

Итак, задача простая: отключить кэширование. Что мы делаем? Идём в файл .htaccess и вводим туда следующие строчки

  <IfModule mod_headers.c>
  Header  append Cache-Control "no-store, no-cache, must-revalidate"
  </IfModule>
  <IfModule mod_expires.c>
  ExpiresActive  On
  ExpiresDefault  "now"
  </IfModule>

Данная конструкция отключает кэширование и решает поставленную проблему!

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

Тогда существует изящный обход этого камня преткновения — разрешить кэширование, к примеру, на один час.

<IfModule mod_headers.c>
Header append Cache-Control "public"
</IfModule> 
<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresDefault "access plus 1 hours" 
</IfModule>

Также рекомендую выключать кэширование на стадии вёрстки и программирования. Оно Вам там точно ни к чему!

А.Пряхин

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *