Скачать приложение
Всё SEO продвижение Digital Маркетинг Разработка сайтов Контекстная реклама Соцсети Дизайн Бизнес Мессенджеры Нейросети Менеджмент Новинки Психология Экономика
SEO продвижение

Кэширование сайта — что это такое

admin
28 августа 2025 · 4 минут · 1

Кэширование — сохранение копий данных в быстродоступном хранилище для ускорения повторного доступа к ним. Браузер сохраняет CSS и изображения чтобы не загружать их заново при следующем визите. Сервер сохраняет готовые HTML-страницы чтобы не генерировать их из базы данных при каждом запросе. Итог — страница загружается быстрее, нагрузка на сервер снижается.

Что такое кэширование

Кэш (cache) — временное хранилище данных между источником данных и потребителем. Когда потребитель запрашивает данные — система сначала проверяет кэш. Если данные там есть (cache hit) — возвращает их из кэша без обращения к источнику. Если данных нет (cache miss) — обращается к источнику, получает данные и сохраняет копию в кэше для следующих запросов.

Принцип кэширования основан на двух наблюдениях. Первое — временная локальность: если данные запрошены сейчас, вероятно они понадобятся снова в ближайшем будущем. Второе — пространственная локальность: если запрошены одни данные, соседние данные тоже скоро понадобятся.

Применяется на всех уровнях компьютерных систем: кэш процессора (L1/L2/L3) хранит часто используемые инструкции и данные ближе к ядру, оперативная память кэширует данные с жёсткого диска, SSD кэширует данные с HDD в гибридных системах, браузер кэширует ресурсы сайтов, CDN кэширует статические файлы ближе к пользователю, серверное ПО кэширует результаты запросов к базе данных и готовые HTML-страницы.

Кэширование данных — что это такое

Кэширование данных — сохранение результатов дорогостоящих операций с данными: запросов к базе данных, обращений к внешним API, вычислений. Вместо повторного выполнения запроса система возвращает сохранённый результат.

Пример: интернет-магазин выводит список товаров категории. Без кэширования — при каждом запросе страницы выполняется SQL-запрос к базе данных, база возвращает список товаров, PHP собирает HTML. С кэшированием — первый запрос выполняется стандартно, готовый HTML или результат SQL-запроса сохраняется в кэш (Redis, Memcached, файл). Следующие 1000 запросов получают данные из кэша за миллисекунды без обращения к базе.

Ключевой параметр кэша — TTL (Time To Live), время жизни записи. По истечении TTL запись считается устаревшей и при следующем запросе обновляется из источника. Выбор TTL — баланс между актуальностью данных и нагрузкой на систему.

Виды кэширования

 

  • Браузерное кэширование. Браузер сохраняет статические ресурсы — CSS, JavaScript, изображения, шрифты — на устройстве пользователя. При повторном посещении сайта ресурсы загружаются с диска устройства а не с сервера. Управляется HTTP-заголовками: Cache-Control задаёт политику кэширования, Expires задаёт дату истечения, ETag и Last-Modified позволяют браузеру проверить актуальность кэшированного ресурса.
  • Серверное кэширование страниц. Готовые HTML-страницы сохраняются на сервере. При запросе сервер отдаёт сохранённый файл минуя PHP, базу данных и весь стек приложения. Самый эффективный вид кэширования для CMS — снижает время ответа с сотен миллисекунд до единиц миллисекунд.
  • Кэширование объектов (Object Cache). Результаты запросов к базе данных сохраняются в памяти — Redis или Memcached. Следующий запрос получает данные из памяти не обращаясь к базе. Используется совместно с серверным кэшированием страниц — ускоряет динамические части сайта которые не могут быть полностью закэшированы на уровне страниц.
  • CDN-кэширование. Content Delivery Network — сеть серверов распределённых географически. Статические ресурсы и иногда целые страницы кэшируются на узлах CDN ближайших к пользователю. Пользователь из Владивостока получает ресурсы с CDN-узла в Азии а не с сервера в Москве — задержка снижается.
  • Кэширование операционной системы. ОС кэширует данные с диска в оперативной памяти (page cache). Файлы к которым часто обращаются хранятся в RAM — чтение происходит в разы быстрее чем с диска.
  • Кэш процессора. L1, L2, L3 кэш — сверхбыстрая память внутри процессора хранящая часто используемые инструкции и данные. Доступ к L1 кэшу — около 1 нс, к оперативной памяти — 60–100 нс, к SSD — тысячи нс. Управляется аппаратно без участия программиста или системного администратора.
Вид кэширования Где хранится Что кэшируется Управление
Браузерный кэш Устройство пользователя CSS, JS, изображения HTTP-заголовки
Серверный кэш страниц Сервер (файлы/RAM) Готовые HTML-страницы Плагины, конфиг сервера
Object Cache RAM (Redis/Memcached) Результаты запросов к БД Код приложения
CDN Серверы CDN Статические файлы, страницы Настройки CDN
Кэш ОС Оперативная память Файлы с диска Автоматически
Кэш процессора Процессор Инструкции и данные Аппаратно

Как настроить кэширование через файл .htaccess

htaccess

Файл .htaccess — конфигурационный файл веб-сервера Apache. Позволяет управлять поведением сервера на уровне директории без доступа к глобальной конфигурации. Через .htaccess настраивают браузерное кэширование статических ресурсов — указывают серверу какие заголовки отправлять браузеру.

Файл .htaccess находится в корневой директории сайта. Если файла нет — создайте его через FTP или файловый менеджер хостинга.

Настройка кэширования через mod_expires

Модуль mod_expires управляет заголовком Expires — датой истечения кэша. Браузер не будет перезапрашивать ресурс до этой даты.

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"

    # Изображения
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/webp "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType image/svg+xml "access plus 1 year"
    ExpiresByType image/x-icon "access plus 1 year"

    # CSS и JavaScript
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType text/javascript "access plus 1 month"

    # Шрифты
    ExpiresByType font/woff2 "access plus 1 year"
    ExpiresByType font/woff "access plus 1 year"
    ExpiresByType application/font-woff "access plus 1 year"

    # HTML и данные
    ExpiresByType text/html "access plus 0 seconds"
    ExpiresByType application/json "access plus 0 seconds"
</IfModule>

Логика значений TTL: изображения и шрифты меняются редко — 1 год. CSS и JavaScript — 1 месяц (обновляются при изменениях дизайна). HTML-страницы — 0 секунд (содержимое может измениться в любой момент).

Настройка кэширования через mod_headers

Модуль mod_headers позволяет управлять заголовком Cache-Control — более гибким современным механизмом кэширования.

<IfModule mod_headers.c>
    # Изображения и шрифты — кэш на 1 год
    <FilesMatch "\.(ico|jpg|jpeg|png|gif|webp|svg|woff|woff2|ttf|eot)$">
        Header set Cache-Control "max-age=31536000, public, immutable"
    </FilesMatch>

    # CSS и JavaScript — кэш на 1 месяц
    <FilesMatch "\.(css|js)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>

    # HTML — не кэшировать
    <FilesMatch "\.(html|htm|php)$">
        Header set Cache-Control "no-cache, no-store, must-revalidate"
        Header set Pragma "no-cache"
        Header set Expires 0
    </FilesMatch>
</IfModule>

Директива immutable сообщает браузеру что файл никогда не изменится — браузер не будет проверять его актуальность даже при принудительном обновлении страницы. Используется только для файлов с версионированием в имени (style.v2.css, app.1a2b3c.js).

Включить сжатие gzip через .htaccess

Сжатие gzip снижает объём передаваемых данных — текстовые ресурсы (HTML, CSS, JS) сжимаются в 2–10 раз. Настраивается в .htaccess через mod_deflate:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE application/json
    AddOutputFilterByType DEFLATE image/svg+xml
    AddOutputFilterByType DEFLATE application/xml
</IfModule>

Изображения (JPEG, PNG, WebP) сжимать через gzip не нужно — они уже используют собственное сжатие, повторное сжатие не даёт эффекта и создаёт лишнюю нагрузку на сервер.

Полный блок кэширования для .htaccess

Готовый блок объединяющий браузерное кэширование и сжатие — вставляется в начало файла .htaccess:

# Сжатие gzip
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/css application/javascript
    AddOutputFilterByType DEFLATE text/plain application/json image/svg+xml
</IfModule>

# Браузерное кэширование
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/webp "access plus 1 year"
    ExpiresByType image/svg+xml "access plus 1 year"
    ExpiresByType image/x-icon "access plus 1 year"
    ExpiresByType font/woff2 "access plus 1 year"
    ExpiresByType font/woff "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType text/html "access plus 0 seconds"
</IfModule>

После сохранения изменений в .htaccess проверьте работу кэширования через PageSpeed Insights или Chrome DevTools → вкладка Network → колонка Cache-Control в заголовках ответа.

Кэширование WordPress — плагины и настройка

cache-plaguins

WordPress генерирует страницы динамически: при каждом запросе PHP обращается к базе данных, собирает контент, применяет шаблоны и отдаёт готовый HTML. Без кэширования каждый посетитель инициирует этот цикл заново. Плагин кэширования сохраняет готовый HTML и отдаёт его напрямую минуя PHP и базу данных.

WP Super Cache

WP Super Cache — плагин кэширования от Automattic, разработчиков WordPress. Более 2 миллионов активных установок. Генерирует статические HTML-файлы страниц на диске сервера. Три режима работы: простой (через PHP, совместимость максимальная), расширенный (через mod_rewrite в .htaccess, скорость максимальная), WP-Cache (через PHP с поддержкой cookies).

Для максимальной скорости используют расширенный режим — Apache отдаёт статический HTML файл напрямую не запуская PHP. Настройка: Параметры → WP Super Cache → вкладка «Просто» → выбрать «Кэширование включено» → сохранить → вкладка «Дополнительно» → выбрать «Использовать mod_rewrite для обслуживания файлов кэша».

W3 Total Cache

W3 Total Cache — наиболее функциональный бесплатный плагин кэширования для WordPress. Охватывает все уровни кэширования: страницы, объекты базы данных, фрагменты, браузерный кэш, интеграция с CDN. Поддерживает Redis и Memcached как хранилища для object cache.

Настройка значительно сложнее чем у WP Super Cache — требует понимания принципов работы кэша. Для стандартного сайта достаточно включить: Page Cache (режим Disk: Enhanced), Browser Cache (включить все опции сжатия и заголовков), Minify (объединение и минификация CSS и JS).

LiteSpeed Cache

LiteSpeed Cache работает в полную силу только на хостингах с веб-сервером LiteSpeed — многие shared-хостинги (Reg.ru, Beget, TimeWeb) поддерживают LiteSpeed. На Apache функциональность ограничена.

При совместимом сервере LiteSpeed Cache даёт наилучшие результаты среди бесплатных решений: серверное кэширование на уровне веб-сервера (быстрее чем PHP-кэш), автоматическая оптимизация изображений и конвертация в WebP, отложенная загрузка изображений, Critical CSS, минификация. Настройка через интуитивный интерфейс с пресетами.

WP Rocket

WP Rocket — платный плагин кэширования ($59/год для одного сайта). Де-факто стандарт для производительных WordPress-сайтов. Включает: кэширование страниц, сжатие и объединение CSS/JS, отложенную загрузку изображений, предзагрузку кэша, удаление неиспользуемого CSS, интеграцию с CDN и object cache. Настройка через простой интерфейс без технических знаний.

Плагин Стоимость Сложность настройки Object Cache
WP Super Cache Бесплатно Низкая Нет
W3 Total Cache Бесплатно Высокая Redis, Memcached
LiteSpeed Cache Бесплатно Средняя Redis
WP Rocket $59/год Низкая Через расширение

Как отключить кэширование WordPress

Отключение кэша нужно при разработке и отладке — чтобы изменения отображались немедленно без очистки кэша.

Через плагин: найдите кнопку «Очистить кэш» или «Purge Cache» в административной панели — она появляется в верхней панели WordPress после установки плагина кэширования. Большинство плагинов добавляют кнопку полной очистки кэша.

Полное отключение кэширования: деактивируйте плагин кэширования через Плагины → Активные плагины → Деактивировать. Для WP Super Cache дополнительно проверьте что из .htaccess удалены правила кэширования (плагин удаляет их автоматически при деактивации).

На хостинге Reg.ru: кэширование может быть включено на уровне хостинга независимо от плагинов WordPress. Для отключения: панель управления хостингом → раздел «Сайты» → настройки сайта → отключить кэширование. Актуально при отладке — включайте обратно после завершения работ.

PHP-кэширование

PHP-кэширование работает на нескольких уровнях: кэш байт-кода (OPcache), кэш пользовательских данных (APCu, Redis, Memcached).

OPcache — кэш байт-кода PHP

PHP-скрипты компилируются в байт-код при каждом выполнении. OPcache сохраняет скомпилированный байт-код в памяти — при следующем запросе PHP не компилирует файл заново. Ускорение — от 2 до 10 раз в зависимости от приложения.

OPcache входит в стандартную поставку PHP начиная с версии 5.5. Включается в php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.save_comments=1

Большинство хостингов включают OPcache по умолчанию. Проверить: phpinfo() → найти раздел «opcache» → статус «enabled».

Кэширование данных в PHP через Redis

Redis — хранилище данных в памяти используемое для кэширования результатов запросов к базе данных, результатов API-вызовов, сессий. Работает как key-value хранилище с поддержкой TTL.

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$cacheKey = 'products_category_' . $categoryId;
$cached = $redis->get($cacheKey);

if ($cached) {
    $products = json_decode($cached, true);
} else {
    $products = $db->query("SELECT * FROM products WHERE category_id = ?", $categoryId);
    $redis->setex($cacheKey, 3600, json_encode($products)); // TTL 1 час
}

Кэширование страниц в PHP

Простое файловое кэширование HTML-страниц без фреймворка:

$cacheFile = 'cache/' . md5($_SERVER['REQUEST_URI']) . '.html';
$cacheTime = 3600; // 1 час

if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) {
    echo file_get_contents($cacheFile);
    exit;
}

ob_start();
// ... генерация страницы ...
$content = ob_get_clean();
file_put_contents($cacheFile, $content);
echo $content;

Кэширование в других технологиях

Кэширование в Laravel. Laravel имеет встроенный unified cache API поддерживающий драйверы file, database, Redis, Memcached, DynamoDB. Настройка драйвера в config/cache.php. Использование:

// Получить из кэша или выполнить запрос и сохранить
$products = Cache::remember('products', 3600, function () {
    return Product::all();
});

// Очистить кэш
Cache::forget('products');

Кэширование в Django. Django поддерживает файловый кэш, кэш в памяти (LocMemCache), Memcached, Redis (через django-redis). Настройка в settings.py:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient"},
        "TIMEOUT": 3600,
    }
}

Кэширование MySQL. Query Cache в MySQL кэшировал результаты SELECT-запросов. Начиная с MySQL 8.0 Query Cache удалён из-за низкой эффективности при высокой конкурентности. Современный подход — кэширование на уровне приложения через Redis или Memcached. InnoDB Buffer Pool кэширует данные и индексы таблиц в памяти — его размер (innodb_buffer_pool_size) настраивают под объём рабочего набора данных, обычно 70–80% доступной RAM.

Кэширование SSD. В контексте хранения данных SSD используется как кэш для HDD в гибридных системах (Intel Optane, технология кэширования в NAS-устройствах). Горячие данные хранятся на быстром SSD, холодные — на ёмком HDD. Операционные системы и системы хранения управляют этим автоматически без участия пользователя.

0

Комментарии скоро откроются. А пока — пишите нам в Telegram-канал.