Drupal: запрет кэширования страницы модуля

Столкнулся недавно с такой проблемой: на сайте www.carhelpinfo.ru, работающим под Drupal, есть форма для поиска автомобильных запчастей, реализованная мной в виде отдельного модуля. Доступ к этой форме должен быть у всех пользователей, даже анонимных.

Для ускорения работы сайта используется Memcached. С включением опции кэширования страниц для анонимов сайт открывается практически мгновенно. Но вот беда — при этом не работает форма поиска: после запроса анонимному пользователю выдается не страница с результатами, а старая закэшированная страница.

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

Чтобы избежать этого, я просто стал передавать данные формы методом GET. Таким образом, при каждом запросе URL страницы меняется, и она генерируется снова. А если пользователь запросит то, что кто-то уже искал, то ему будет отдана страница из кэша.

Минусом такого метода является "загрязнение" URL, но в данном конкретном случае для сайта www.carhelpinfo.ru это не имеет значения.

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

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