Кэширование в Drupal

Выбор способа кэширования в Drupal: что вам подойдет?
Вы стоите перед задачей ускорить сайт на Drupal — и сразу утыкаетесь в десятки плагинов, модулей и рекомендаций. Одни советуют включить внутренний кэш страниц, другие — ставить Redis, а третьи — использовать Varnish. Давайте разберемся вместе, как не заблудиться в этом многообразии и выбрать то, что реально даст прирост скорости именно вашему проекту.
Представьте: вы работаете над корпоративным порталом с тысячами страниц новостей, или, может быть, это высоконагруженный интернет-магазин с десятками тысяч посетителей в час. А может, у вас небольшой блог с парой статей в день. Для каждого сценария — свой «рецепт» кэширования. Игнорирование этого различия приведет или к переплате за ресурсы, или к тормозам на сайте.
Кому подойдет кэширование силами Drupal, а кому — нет?
Drupal из коробки предлагает несколько уровней кэширования: кэш страниц (Page Cache), кэш блоков (Block Cache), кэш сущностей (Entity Cache), кэш запросов к базе данных (Database Cache). Это отличный старт, но у него есть ограничения. Включив «Internal Page Cache» (для анонимных пользователей) и «Internal Dynamic Page Cache» (для аутентифицированных), вы получите ускорение до 5-10 раз на страницах, которые редко меняются. Однако если у вас динамические страницы — с персонализацией, скидками, корзиной — такой кэш работать не будет, и сайт все равно будет грузиться тяжело.
Кому это подходит идеально: сайты-визитки, блоги с редкими обновлениями, порталы с контентом, который не постоянно разный для разных пользователей. Но если вы строите крупный интернет-магазин с сотнями категорий товаров, где каждому покупателю показываются персональные цены, — встроенный кэш вам не поможет. Здесь нужно идти дальше.
Внешние инструменты: Varnish, Redis, CDN — что выбрать?
Когда встроенных механизмов становится мало, на помощь приходят внешние кэширующие серверы и хранилища. Вот краткое сравнение трех популярных подходов.
- Varnish Cache — это кэширующий HTTP-прокси, который ставится перед сервером Drupal. Он обрабатывает запросы самостоятельно, отдавая готовые HTML-страницы без участия Drupal вообще. Прирост скорости — до 50-100 раз. Но: сложнее конфигурация, не подходит для страниц с динамикой (корзина, юзер-специфичный контент), требует правильного бана и правил отмены кэша. Если у вас однотипные страницы для всех посетителей — это бомба. Если у вас глубоко персонализированный опыт — будет сложно.
- Redis — это in-memory хранилище, ускоряет обработку запросов Drupal, кэшируя объекты конфигурации, дисплеи блоков, данные сессий. В паре с Varnish или без него. Решает проблему медленной базы данных: типичный залп из 500 запросов к БД снижается до 50-100, а то и до нуля — Redis работает в оперативной памяти. Подходит для динамических страниц, когда содержимое формируется каждый раз, но быстро.
- CDN (Content Delivery Network) — кэширование статики (картинки, CSS, JS) на серверах по всему миру. Drupal здесь ни при чем — это просто обертка. Нужно всегда, если аудитория по всей планете: время загрузки для пользователя в Австралии сокращается с 10 секунд до 1-2. Сложность: нужно правильно настроить кэш-контролеры в Drupal, иначе CDN будет отдавать устаревшие версии.
Таблица сравнения: какой метод когда применять
Ниже — сводная характеристика, которая поможет вам сориентироваться в выборе. Смотрите на ваш тип пользователей, частоту обновления контента и бюджет.
- Критерий: Тип пользователей
Встроенный кэш Drupal: только анонимные (90% случаев).
Varnish: анонимные, редко — авторизованные (с общим контентом).
Redis: и анонимные, и авторизованные, и персонализированные.
CDN: все, но только для статики. - Критерий: Частота изменений контента
Встроенный кэш Drupal: редкие изменения (1-2 правки в день).
Varnish: от редких до средних (до 50 правок в день).
Redis: частые (тысячи правок), товарный каталог.
CDN: статика без изменений неделями. - Критерий: Техническая сложность настройки
Встроенный кэш Drupal: минимальная — включил галки в админке.
Varnish: высокая — нужна настройка VCL, баны, знание HTTP.
Redis: средняя — установка модуля redis, настройка connection.
CDN: средняя — работа с API CDN-провайдера, интеграция модуля purge. - Критерий: Стоимость (сервер + обслуживание)
Встроенный кэш Drupal: бесплатно, на том же сервере.
Varnish: нужен отдельный сервер (от $30/мес), админ.
Redis: дополнительная память (около $10/мес).
CDN: от $0 до $100+ за объем трафика. - Критерий: Подходит для
Встроенный кэш Drupal: лендингов, малых сайтов.
Varnish: новостные порталы, форумы, блоги с высоким трафиком.
Redis: интернет-магазины, личные кабинеты социальные сети.
CDN: любой сайт, требуется только глобальная отдача.
Практический пример: вы владелец интернет-магазина на Drupal 10
Допустим, вы запускаете умный экомагазин с тысячами товаров, персонализированными рекомендациями (на основе истории покупок) и сезонными скидками. Встроенный кэш Drupal здесь сработает плохо: страницы каталога меняются мгновенно при изменении цены, корзина и рекомендации уникальны для каждого пользователя. Если вы включите Internal Page Cache, у анонимных пользователей данные будут устаревшими (цены на складе уже изменились, а в кэше старая версия). А для авторизованных — он вообще не сработает, потому что страница динамическая. Решение — Redis для кэша объектов (Block Cache, Entity Cache) и, возможно, Varnish для кэширования страниц каталога только для анонимных, но с банами при обновлении ноды. Но не для персональных страниц корзины — они должны проходить мимо Varnish.
Вы получите сокращение нагрузки на базу данных в 5-7 раз, время отклика снизится с 2 секунд до 0.2-0.5 секунды на анонимных страницах. Но за это придется настроить обработку cookie: Varnish отдавать кэш только при отсутствии cookie с сессиями. И добавить экспорт: для каждого изменения ноды — выполнять бан (удаление кэш-ключа) или регестрацию страницы. Это технически сложнее, но прирост производительности оправдывает затраты.
Как не переплатить и не усложнить себе жизнь: три правила
Первое правило: начинайте с малого. Включите встроенный кэш Drupal и используйте модуль Internal Cache By Role. Если сайт невысоконагруженный (до 5 тысяч посетителей в сутки) и контент обновляется редко — этого хватит за глаза. Второе правило: мониторинг и логи. Установите Drupal CMS с модулем Devel (Devel Cache) — вы сможете видеть, какие запросы не кэшируются, где узкое место. Третье правило: используйте Entity Cache в Admin UI. Не забывайте, что кэш блоков и конфигураций тоже влияет на скорость билда. Без этого простые шаги дадут прирост 2-3 раза, а не 10-20.
Заключение
Выбор способа кэширования в Drupal — это не единое решение для всех. Вы сравниваете внутренние механизмы и внешние инструменты. Поймите, что именно тормозит: база данных, количество запросов, статика, динамический контент? Попробуйте все три варианта на локальной копии сайта: включите поочередно встроенный кэш, добавьте Redis, затем поставьте Varnish стенд. Замерить результаты помогут инструменты Apache Benchmark или k6. Только так вы найдете свой рецепт, который даст максимальную производительность за вменяемую цену. Не бойтесь экспериментировать — Drupal позволяет это сделать без простоя сайта.
Добавлено: 23.04.2026
