Перейти к основному содержимому
SiteScan.top

Кеширование и сжатие: бесплатная скорость, которую никто не забирает

Cache-Control, который действительно кеширует, почему хеш в имени файла меняет всё, и настройка сжатия, которой до сих пор нет на половине сайтов.

Инфраструктура · Опубликовано: 30 августа 2026 г. · 3 мин чтения · Анна Ковалёва

Большая часть работы над скоростью дорогая: переписать компоненты, отложить скрипты, поспорить о фреймворке. Две настройки — нет. Они лежат в конфиге, занимают полдня и до сих пор выставлены неверно на изрядной доле продакшен-сайтов.

Сначала сжатие

Текст сжимается на семьдесят-восемьдесят процентов. HTML, CSS, JavaScript, JSON, SVG — всё это текст. Если в ответе нет Content-Encoding, вы отдаёте вчетверо больше байт просто так.

Brotli выигрывает у gzip примерно пятнадцать процентов на том же контенте и поддерживается везде, где это важно; gzip оставьте запасным вариантом. Две частые ошибки: сжимать изображения (JPEG и PNG уже сжаты — тратите процессор ни за что) и забывать, что настройка действует по MIME-типу, так что поддомен, отдающий JSON из другого конфига, тихо шлёт его сырым.

Cache-Control по-честному

Заголовок отвечает на два вопроса: можно ли это хранить и как долго. Полезных схем немного.

Ассеты с хешем — /app.4f2a91.js:

Cache-Control: public, max-age=31536000, immutable

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

HTML:

Cache-Control: no-cache

Вопреки названию это не «не кешировать». Это «сохрани, но перед использованием переспроси». Браузер отправляет If-None-Match и обычно получает 304 без тела — быстро и никогда не протухает.

Персональные ответы:

Cache-Control: private, no-store

Для всего, что общий кеш хранить не должен: личный кабинет, корзина, всё за логином.

Ошибки, которые дороже всего

Короткий max-age на файлах с хешем. max-age=600 на имени с хешем содержимого перечёркивает всю выгоду.

Длинный max-age на файлах без хеша. /logo.png, закешированный на год, означает, что редизайн не доедет ни до кого, кто заходил раньше.

Нет ETag или Last-Modified на HTML. Без валидатора браузер не может спросить «изменилось ли»; он скачивает документ целиком.

Неверный Vary. Vary: User-Agent дробит кеш CDN на тысячи почти одинаковых записей и почти никогда не является тем, что вы имели в виду.

Проверяйте, а не предполагайте

Конфигурация — одно, а то, что реально долетает до браузера, — другое: CDN, прокси или панель хостинга могут переписать заголовки по дороге. Проверка идёт по каждому ответу и по всему сайту:

для каждого ответа:
  есть content-encoding на text/*?
  cache-control соответствует классу ресурса?
  есть etag или last-modified на документах?

Запускайте после каждого деплоя. Этот класс регрессий беззвучный — ничего не ломается, сайт просто становится медленнее, а счёт за трафик растёт, — потому он и живёт годами, пока никто не смотрит.

Читайте также

Проверьте, что из этого есть на вашем сайте

Бесплатное сканирование покажет битые ссылки, ошибки JS и проблемы производительности за минуту.