Кэширование сайта — сохранение готовых результатов вычислений (HTML-страниц, объектов из БД, фрагментов шаблонов) в быстрой памяти или на диске для повторного использования без повторных вычислений. Для динамического сайта кэширование — ключевой инструмент производительности: переход от генерации страницы PHP+MySQL (100–500 мс) к отдаче из кэша (5–50 мс) ускоряет TTFB в 10–100 раз.
Уровни кэширования
Кэширование работает на нескольких уровнях одновременно:
- HTTP-кэш браузера — браузер хранит статические файлы по заголовкам
Cache-ControlиExpires. Повторные визиты загружают CSS/JS/изображения из локального кэша без обращения к серверу. - CDN-кэш — CDN кэширует статику на edge-серверах ближайших к пользователю. Первый запрос — cache miss (с origin), повторные — cache hit (с edge).
- Reverse proxy кэш — Nginx proxy_cache или Varnish кэшируют целые HTML-страницы на сервере. Обходят PHP и БД полностью для кэшированных страниц.
- OPCache PHP — кэш скомпилированного байткода PHP в памяти. Без OPCache каждый PHP-файл компилируется при каждом запросе.
- Object cache (Redis, Memcached) — кэш объектов из БД в RAM. WordPress с Redis object cache выполняет на 60–80% меньше SQL-запросов.
- БД query cache — MySQL кэшировал результаты запросов (убрано в MySQL 8.0 из-за проблем производительности под высокой нагрузкой).
Кэширование WordPress
Экосистема WordPress имеет специфические решения:
- Page cache plugins — WP Rocket, W3 Total Cache, LiteSpeed Cache, WP Super Cache — генерируют статический HTML и отдают его без запуска PHP.
- Object cache — подключается через
wp-content/object-cache.php; Redis (Object Cache Pro, Redis Object Cache plugin) или Memcached. - Fragment cache — кэширование отдельных фрагментов шаблона (сайдбар, меню) через transient API.
История
Кэширование как концепция появилось с первыми компьютерами: CPU-кэш L1 введён в IBM System/360 Model 85 в 1969 году. Web-кэширование формализовано в HTTP/1.0 (RFC 1945, 1996) через заголовки Pragma и Expires. HTTP/1.1 (RFC 2616, 1997) ввёл Cache-Control с богатой семантикой. Varnish Cache создан в 2006 году как высокопроизводительный HTTP-кэш. Redis (2009) стал стандартом для object cache и session cache.
На что обращать внимание
Кэширование динамического контента требует стратегии инвалидации: страница товара с кэшем 24 часа не покажет изменённую цену сразу. Для авторизованных пользователей и страниц с персонализацией (корзина, личный кабинет) page cache должен быть отключён или использовать вариацию по куки. Ключи инвалидации кэша — частая причина показа устаревшего контента. Тестируйте поведение кэша при изменении контента: проверяйте cache-hit/cache-miss через заголовки (X-Cache: HIT).
Стратегия кэширования
Многоуровневое кэширование: OPcache (PHP байт-код) → Object Cache (Redis/Memcached для запросов к БД) → Page Cache (Varnish/nginx fastcgi_cache для HTML-страниц) → CDN (статические ассеты). Каждый уровень снижает нагрузку на следующий. WordPress без кэша: 1 страница → 50-100 SQL-запросов → 200-500 мс генерации. С OPcache + Redis: 1-5 SQL → 20-50 мс. С Page Cache: 0 PHP/SQL → 5-15 мс (TTFB). Redis-кэш для объектов — самое эффективное вложение для любого PHP-сайта.