Domain sharding в WordPress: ускоряем статический контент на cookie‑free домене
Введение: почему статика тормозит ваш сайт
Большинство современных тем и плагинов WordPress загружают CSS, JavaScript и изображения с того же домена, что и HTML. При этом каждый запрос несёт в себе cookie‑данные, которые увеличивают размер заголовка. При большом количестве запросов это приводит к дополнительным мегабайтам трафика и замедлению первой отрисовки страницы.
Domain sharding — это метод распределения статических ресурсов по отдельным субдоменам, которые не отправляют cookie. В результате каждый запрос становится легче, а браузер может параллельно открывать больше соединений.
Что такое domain sharding и как он работает
Термин domain sharding появился ещё в эпоху HTTP/1.1, когда браузер ограничивал количество одновременных соединений с одним хостом (обычно 6). Разбивая ресурсы на несколько хостов, мы получаем:
- Уменьшение объёма заголовков (отсутствие cookie).
- Больше параллельных запросов → ускоренная загрузка.
- Возможность использовать отдельные CDN‑провайдеры.
Однако с появлением HTTP/2 (мультиплексирование в одном соединении) выгода от sharding снижается. Поэтому важно понять, когда стоит включать этот метод, а когда лучше оставить всё на одном домене.
Подготовка cookie‑free субдомена
Шаг 1: создаём субдомен
В панели управления хостингом добавьте запись A (или CNAME) типа static.example.com, указывающую на тот же IP, что и основной сайт. Убедитесь, что сертификат SSL покрывает субдомен (можно использовать Let’s Encrypt через Cloudflare).
Шаг 2: отключаем cookie для субдомена
Для Apache добавьте в .htaccess строку:
Header unset Set-Cookie Для Nginx:
proxy_hide_header Set-Cookie; Эти директивы гарантируют, что ответы с static.example.com не будут содержать cookie.
Настройка WordPress: перенаправляем статические файлы
Шаг 3: фильтр wp_get_attachment_url
Добавьте в functions.php следующую функцию. Она заменит базовый URL загрузок на URL субдомена.
function my_sharding_attachment_url( $url, $post_id ) { $upload_dir = wp_upload_dir(); $static_domain = 'https://static.example.com'; // Заменяем путь к директории uploads на субдомен $url = str_replace( $upload_dir['baseurl'], $static_domain, $url ); return $url; } add_filter( 'wp_get_attachment_url', 'my_sharding_attachment_url', 10, 2 ); // Для тем, которые используют get_template_directory_uri() function my_sharding_theme_assets( $url ) { $static_domain = 'https://static.example.com'; $theme_dir = get_template_directory_uri(); return str_replace( $theme_dir, $static_domain. '/wp-content/themes/'. get_template(), $url ); } add_filter( 'theme_root_uri', 'my_sharding_theme_assets' ); Шаг 4: CDN‑плагин (по желанию)
Если вы уже используете CDN, просто укажите в его настройках static.example.com в качестве Origin Pull домена. Это избавит от необходимости писать дополнительный код.
Конфигурация веб‑сервера для оптимального кеширования
Шаг 5: заголовки кэш‑контроля
На субдомене задаём длительный срок жизни файлов, так как они меняются редко.
# Apache (в.htaccess) ExpiresActive On ExpiresByType image/webp "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" Для Nginx:
location ~* .(css|js|jpg|jpeg|png|webp)$ { expires 30d; add_header Cache-Control "public, max-age=2592000"; # Отключаем cookie proxy_hide_header Set-Cookie; } Шаг 6: HTTP/2 и sharding
Если ваш сервер поддерживает HTTP/2 (например, через Cloudflare), то количество одновременных запросов уже не ограничено. В этом случае:
- Сохраняйте sharding только для очень тяжёлых страниц (более 30 запросов).
- Контролируйте количество субдоменов: 2‑3 – оптимальный максимум.
Переход на HTTP/2 можно проверить с помощью инструментов браузера или сервисов Blackfire (см. нашу статью о профилировании).
Тестирование и профилирование результатов
Шаг 7: измеряем экономию
Запустите Lighthouse или WebPageTest до и после внедрения sharding. Обратите внимание на показатели:
- Time to First Byte (TTFB) – должен снизиться за счёт меньшего объёма заголовков.
- First Contentful Paint (FCP) – ускоряется, когда браузер получает CSS/JS без cookie.
- Общий размер передаваемых данных – обычно экономия 10‑40 %.
Для более глубокого анализа используйте Blackfire. Он покажет, какие запросы стали быстрее и какие файлы всё ещё «тянут» сеть.
Заключение: стоит ли использовать domain sharding?
Domain sharding остаётся полезным инструментом, если ваш сайт обслуживает множество статических файлов и работает по HTTP/1.1 (например, через старый хостинг). При включённом HTTP/2 выгода снижается, но небольшое sharding (2‑3 субдомена) может стать «страховкой» на случай падения поддержки протокола.
Главное – протестировать изменения, а не полагаться на теорию. При правильной настройке вы получите ускоренную загрузку, меньший объём трафика и более приятный пользовательский опыт.
📚 Читайте также:
❓ Часто задаваемые вопросы
Что происходит с cookie, если статика обслуживается с отдельного домена?
Браузер не отправляет cookie, привязанные к основному домену, при запросах к субдомену. Это уменьшает размер HTTP‑заголовков и ускоряет передачу файлов.
Нужно ли отключать GZIP на субдомене при domain sharding?
Нет. GZIP (или Brotli) остаётся полезным, так как сжимает тело ответа. Отключать его следует только если субдомен обслуживается CDN, который уже делает сжатие.
Как проверить, что статические файлы действительно загружаются с cookie‑free домена?
Откройте DevTools → Network, найдите запрос к CSS/JS и посмотрите колонку «Cookies». Если они пусты, sharding работает корректно.
Можно ли использовать domain sharding вместе с WebP‑изображениями?
Да. При включённой поддержке WebP (см. инструкцию) изображения также будут отдаваться с субдомена, получая двойную выгоду – меньше трафика и отсутствие cookie.