Оптимизация производительности Drupal (кэширование, Varnish)

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Оптимизация производительности Drupal (кэширование, Varnish)
Сложная
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Оптимизация производительности Drupal (кэширование, Varnish)

Drupal имеет одну из самых продуманных систем кэширования среди CMS. Кэш-теги, cache contexts, render cache, dynamic page cache, BigPipe — правильное использование этих механизмов даёт TTFB < 50 мс даже для сложных страниц.

Многоуровневое кэширование Drupal

Render cache — кэшируются отдельные render arrays (блоки, вьюхи, поля). Инвалидируется по cache tags.

Dynamic Page Cache — кэширует страницы с учётом контекста (авторизован/нет, язык, роль). Обходит рендеринг, но не обходит bootstrap Drupal.

Internal Page Cache — кэш полных страниц для анонимных пользователей. Хранит HTML на диске/в БД.

External cache (Varnish/Nginx) — кэш перед Drupal. Полные страницы без запуска PHP.

Internal Page Cache

drush en page_cache -y

Конфигурация → Производительность → Cache pages for anonymous users. Время кэширования — минимум 10 минут для контентных сайтов.

// Настройка времени кэша программно
\Drupal::configFactory()
    ->getEditable('system.performance')
    ->set('cache.page.max_age', 3600)  // 1 час
    ->save();

BigPipe: потоковый рендеринг

drush en big_pipe -y

BigPipe рендерит страницу в два прохода: сначала статические части (быстро), затем персонализированные блоки (пользователь видит страницу раньше). Для авторизованных пользователей — критично.

Varnish Cache

Varnish работает как reverse proxy перед Nginx/Apache. Drupal автоматически отправляет заголовки с cache tags — Varnish кэширует ответы и инвалидирует нужные при публикации.

apt install varnish

Varnish конфигурация (/etc/varnish/default.vcl):

vcl 4.1;

import std;
import purge;

backend default {
    .host = "127.0.0.1";
    .port = "8080";  # Nginx на 8080, Varnish на 80/443
}

sub vcl_recv {
    # Не кэшировать авторизованных пользователей
    if (req.http.Cookie ~ "SESS|SSESS") {
        return(pass);
    }

    # Не кэшировать POST запросы
    if (req.method != "GET" && req.method != "HEAD") {
        return(pass);
    }

    # Удалить лишние куки
    unset req.http.Cookie;

    return(hash);
}

sub vcl_backend_response {
    # Кэшировать только 200 ответы
    if (beresp.status != 200) {
        set beresp.uncacheable = true;
        return(deliver);
    }

    # TTL из Drupal заголовков
    if (beresp.http.Cache-Control ~ "max-age") {
        set beresp.ttl = std.duration(regsub(beresp.http.Cache-Control, ".*max-age=([0-9]+).*", "\1") + "s", 0s);
    } else {
        set beresp.ttl = 1h;
    }

    set beresp.grace = 1h;
    return(deliver);
}

sub vcl_deliver {
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
    } else {
        set resp.http.X-Cache = "MISS";
    }
}

Drupal + Varnish: модуль Purge

composer require drupal/varnish_purger drupal/purge
drush en purge purge_drush purge_ui purge_queuer_coretags purge_processor_cron varnish_purger -y

Varnish Purge отправляет BAN-запросы к Varnish при изменении контента. Cache tags автоматически формируются Drupal.

Конфигурация: Конфигурация → Производительность → Varnish Purge → указать IP Varnish и порт.

Redis для кэша Drupal

composer require drupal/redis
drush en redis -y

settings.php:

$settings['redis.connection']['host'] = '127.0.0.1';
$settings['redis.connection']['port'] = 6379;

$settings['cache']['default'] = 'cache.backend.redis';
$settings['cache']['bins']['render'] = 'cache.backend.redis';
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.redis';
// Для bootstrap - оставить в базе для надёжности
$settings['cache']['bins']['bootstrap'] = 'cache.backend.database';

PHP OPcache

opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.jit=tracing
opcache.jit_buffer_size=100m

CSS/JS агрегация

Конфигурация → Производительность:

  • Aggregate CSS files: ✓
  • Aggregate JavaScript files: ✓

Включать только на production. В development — отключить для удобства отладки.

Анализ производительности

# XHProf через drush
composer require drupal/xhprof
drush en xhprof -y
# Профилировать конкретный запрос
drush xhprof:enable && curl https://site.com/heavy-page && drush xhprof:disable

# Медленные запросы
drush sqlq "SELECT * FROM watchdog WHERE type = 'devel' ORDER BY wid DESC LIMIT 20"

Модуль Devel + Query Count показывает количество SQL-запросов и их время на каждой странице.

Результаты типичной оптимизации

Конфигурация TTFB SQL-запросы
Без кэша 800–2000 мс 100–300
Dynamic Page Cache 50–200 мс 5–20
Varnish (анонимные) 1–5 мс 0
Redis + OPcache 100–300 мс 5–15

Сроки

Базовая оптимизация (OPcache, Redis, Internal Page Cache, CSS/JS агрегация) — 2–3 дня. Настройка Varnish с модулем Purge и cache tags — плюс 2–3 дня. Полный аудит и оптимизация — 5–7 дней.