Недавно я столкнулся с тем, что мой сайт на Drupal стал тормозить. Причем, сайт не особо то и посещаемый. В конечном счете, проблема решилась переходом на другой хостинг (shared-хостинг от Руцентра не выдерживал никак), но рассказать я хочу не об этом, а о проблемах ускорения Drupal путем кэширования, с которыми я столкнулся.

Итак, какое инструменты для ускорения существуют на Drupal?



— Встроенное кэширование по адресу admin/settings/performance. У кэширования есть два режима, обычный и агрессивный. Агрессивный не рекомендуется для использования, поскольку он конфликтует со многими модулями. Нормальный, в принципе, никаких тяжелых последствий не имеет. Рассчитан только на анонимных пользователей, и не кэширует страницы, на которых работает CAPTCHA.

— Модуль boost. Как и встроенное кэширование, этот модуль рассчитан на анонимных пользователей. Хранит он свои данные на диске. Если вы включаете boost, рекомендуется выключать кэширование обычное. Boost заранее готовит статические страницы для анонимных пользователей, поэтому со включенным boost у анонимов сайт «летает». К сожалению, boost имеет следующие недостатки. Для адекватного обновления страниц на сайте, кэш должен регулярно очищаться (boost старается, очищать его по частям при изменениях, но это не всегда работает нормально). Поэтому постоянно должен перестраиваться кэш всего сайта. Что уже дает нагрузку на хостинг, приводя к тому, что для анонимов сайт «летает», а для зарегистрированных — тормозит еще больше. Кроме того, при перестроении кэша он может стягивать вставленные картинки из внешних источников, приводя к росту трафика на сайте. Если у вас тариф с ограничением трафика, то это может вас серьезно огорчить.

— Кэширование при помощи nginx для анонимов. Хорошо описано тут в хорошей статье на Хабре. Я бы от себя добавил вот что: не забудьте настроить nginx так, чтобы всякие картинки отдавал именно он, а не Apache. Этим вы сэкономите много оперативки.

— Модуль authcache для кэширования страниц для зарегистрированных пользователей. Определяется набор ролей, для которых кэширование разрешено. Страница кэшируется, если все роли пользователя попали в этот набор. Собственно, по любому подмножеству разрешенных ролей строится версия кэшированной страницы. Поэтому если вы включаете этот модуль, делайте поменьше разных ролей. Кроме того, не включайте его для анонимов — с этим существенно лучше справится boost. Такие вещи, как имя пользователя, authcache кэширует в виде шаблона, заменяя его при непосредственном выводе страниц. Поэтому для зарегистрированных все равно пойдет не чистый html, а некоторая подготовка. Которая может быть медленной, поскольку как мы помним, сервер у нас нагружен, поскольку все время работает boost. Хранить данные лучше всего при помощи модуля cacherouter, который, в свою очередь, имеет опции. Для меня лучше всего подходило хранение на диске.

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

— Использование data uri для вставки картинок прямо в css. Осуществляется модулем css_emimage.

Вот, собственно, на мой взгляд, основные методы ускорения Друпала. Ну и, конечно, переезд на хороший хостинг тоже рулит. И я все-таки просуммирую проблемы:

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