Промахи и попадания в кэш: когда они происходят (и как увеличить коэффициент попаданий в кэш)

Опубликовано: 2022-05-04

Оптимизация производительности вашего веб-сайта без надежной политики кэширования похожа на попытку построить дом на зыбучих песках.

Вы можете использовать лучшие материалы и инструменты, но когда ваш фундамент не является прочным, вы всегда будете чувствовать, что что-то мешает вашему прогрессу.

Ваша политика кэширования является основой исключительной производительности вашего веб-сайта. Если у вас есть надлежащая система кэширования, вы можете значительно повысить скорость своего сайта.

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

И отсутствие кеша — это лишь одна из тем, которые будут рассмотрены в следующих строках вместе с:

  • Краткое введение в кэширование;
  • Что такое кэш-мисс?;
  • Что такое попадание в кэш?;
  • Что такое Cache Hit Ratio и как его рассчитать?;
  • Что такое хороший коэффициент попаданий в кэш?;
  • Как увеличить коэффициент попаданий в кэш?;
  • NitroPack — самый простой способ добиться отличного коэффициента попаданий в кэш.

Давайте начнем!

Краткое введение в кэширование

Прежде чем углубляться в мир кэш-памяти, важно понять, как работает кэширование, какой цели оно служит и почему оно считается лучшей стратегией оптимизации скорости.

Чтобы понять кеширование, нам нужно сделать шаг назад и проследить весь процесс, который происходит за кулисами, когда посетитель запрашивает ваш сайт.

Ваш веб-сайт состоит из документов HTML, файлов JavaScript и CSS, изображений и т. д. Все они хранятся на исходном сервере. Когда кто-то хочет посетить ваш веб-сайт, его браузер отправляет запрос на исходный сервер, который, в свою очередь, отправляет ответ со всеми необходимыми файлами.

Как работает сеть

Когда у вас есть 10 посетителей, которые одновременно запрашивают файлы вашего сайта, проблем быть не должно, и ваш сервер может довольно легко их обработать.

Однако эта модель не работает, когда на ваш сайт заходят 100 000 посетителей.

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

Очередь

Вот где кеширование приходит.

В двух словах, кеширование — это процесс сохранения копии данных вашего сайта (HTML, CSS, JS, изображений и т. д.) в другом месте, называемом веб-кэшем.

Веб-кеш играет роль посредника между пользователями и вашим источником. Таким образом, их запросы обслуживаются из кеша, а не извлекаются с вашего сервера.

Кэширование

В результате ваши страницы загружаются намного быстрее.

Вы можете найти множество типов классификации кэширования. Но для целей этой статьи и для того, чтобы понять, когда происходят попадания и промахи кэша, мы взглянем на два самых популярных типа — браузерное и прокси-кэширование.


Кэширование браузера

Каждый браузер имеет собственную политику кэширования и может хранить данные локально на компьютере пользователя.

Это полезно, потому что ускоряет загрузку ранее посещенной страницы. Фактически, кэширование браузера является основной причиной, по которой кнопки «назад» и «вперед» могут творить чудеса.

Кэширование браузера

К сожалению, кеширование браузера ограничено работой на одном устройстве. Но его самым большим преимуществом является то, что он может сохранять целые сетевые запросы, что делает его обязательным.


Кэширование прокси-сервера

Кэширование прокси помогает снизить нагрузку на сервер и относительно быстро доставлять контент конечным пользователям. В лучшем случае кэширование прокси-сервера работает рука об руку с кэшированием браузера.

Прокси-серверы распространены по всему миру. Обычно они поддерживаются провайдерами CDN (Content Delivery Network).

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

С CDN

В отличие от кэширования браузера, кэширование прокси-сервера не ограничивается устройством и может одновременно предоставлять контент нескольким пользователям.

В этом суть кэширования. Это сложная тема, и многое еще предстоит раскрыть — преимущества и недостатки различных типов кэширования, как настроить правила кэширования и многое другое.

Но это не главное в этой статье.

Если вы хотите глубже погрузиться в тему, вы можете прочитать нашу статью — Веб-кэширование 101: Руководство для начинающих по HTTP-кэшированию (примеры, советы и стратегии)

Или посмотрите наше видео на YouTube:

На данный момент важно помнить, что если запрошенные данные не найдены в вашем веб-кэше, тогда начинают возникать задержки и проблемы. Это приводит нас к промаху кеша.


Что такое кэш-мисс?

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

Когда происходит промах кеша, запрос перенаправляется на исходный сервер.

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

Существует несколько причин промаха кеша.

Например, конкретные данные никогда не кэшировались.

Допустим, у вас есть сайт электронной коммерции, и вы только что добавили новую страницу продукта. Все изображения, файлы HTML, CSS и JavaScript никогда не добавлялись в кэш-память, поскольку их никто никогда не запрашивал. Это означает, что ваш первый посетитель должен будет отправить запрос в ваш источник, чтобы загрузить страницу. После первого запроса данные будут переданы в кеш и обслуживаться из него.

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

Опять же, есть несколько причин, которые могли привести к этому сценарию: потребовалось больше места, приложение запросило удаление или срок действия политики Time to Live для данных истек.

Подробнее о «Времени жить» мы поговорим позже в этой статье.

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

Однако я не хочу, чтобы у вас сложилось впечатление, что вам нужно добиться попадания в кеш в 100% случаев. Это нереально.

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

Например, новостной веб-сайт, такой как bbc.com, может менять содержимое своей домашней страницы несколько раз в течение дня, поскольку необходимо сообщать о последних новостях. В данном случае попадание в кеш означает, что их читатели не видели последнюю версию своего сайта и, соответственно, пропустили последние новости.

Таким образом, в возникновении промаха кеша есть положительная сторона.

Однако, если у вас нет новостного веб-сайта и вы не меняете контент регулярно, вы должны стремиться к тому, чтобы количество промахов кэша было как можно меньше, а попаданий в кэш — как можно больше.


Что такое кэш-хит?

Попадание в кеш происходит, когда запрошенные данные успешно обслуживаются из кеша.

Например, если пользователь посещает одну из страниц вашего продукта, на которой должно отображаться изображение продукта, который вы продаете, его браузер отправит запрос на это изображение в кеш (браузер или CDN). Если в хранилище CDN есть копия изображения, запрос приводит к попаданию в кеш, и изображение отправляется обратно в браузер.


Что такое коэффициент попаданий в кэш и как его рассчитать?

Коэффициент попаданий в кэш измеряет количество запросов, которые кэш успешно доставил из своего хранилища, по сравнению с общим количеством запросов, которые он получил.

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

Вы можете рассчитать коэффициент попаданий в кеш, используя эту формулу:

Формула коэффициента попаданий в кэш

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

На приборной панели NitroPack также отображается эта информация:

НитроПак ХР


Что такое хороший коэффициент попадания в кэш?

Как правило , коэффициент попадания в кеш 80% и выше является хорошим результатом , поскольку это означает, что большинство запросов обслуживаются из кеша.

Все, что ниже 80% на статических веб-сайтах, указывает на неэффективную политику кэширования.

По данным Cloudflare, одного из крупнейших провайдеров CDN в мире:

«Типичный веб-сайт, который в основном состоит из статического контента, может легко иметь коэффициент попадания в кеш в диапазоне 95-99%».

Глобальный коэффициент попадания в кэш для NitroPack составляет 90%. И примерно у 70% всех пользователей NitroPack коэффициент попаданий в кэш составляет 80% или выше.


Как увеличить коэффициент попаданий в кэш?

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

1. Настройте правила кэширования в соответствии с потребностями вашего сайта.

Заголовок cache-control позволяет вам устанавливать множество различных правил кэширования для оптимизации обслуживания вашего контента.

Некоторые из правил включают в себя:

  • no-store указывает веб-кешам ни при каких обстоятельствах не сохранять никакую версию ресурса;
  • no-cache сообщает веб-кэшу, что он должен проверить кэшированный контент на исходном сервере, прежде чем предоставлять его пользователям;
  • max-age устанавливает максимальное количество времени (в секундах), в течение которого кэш может хранить сохраненный ресурс перед его повторной загрузкой или повторной проверкой на исходном сервере. После этого контент помечается как устаревший;
  • s-maxage делает то же самое, что и max-age, но только для кэшей прокси;
  • private сообщает веб-кешам, что только частные кеши могут хранить ответ;
  • public помечает ответ как общедоступный. Любые промежуточные кэши могут хранить ответы, помеченные этой инструкцией;

Заголовок управления кешем

Вы должны установить время жизни (как долго кеш будет хранить ваши данные, прежде чем он извлечет обновленную информацию из источника), которое лучше всего подходит для вашего контента.

Например, если актив меняется примерно каждые два месяца, может быть уместным заголовок максимального возраста в 50 дней. Однако, если актив меняется ежедневно, вы можете использовать заголовок без кэширования .

Дополнительную информацию о заголовках управления кешем, обновлении кеша и проверке можно найти в нашем видео на YouTube:

2. Игнорировать параметры UTM

Запуск нескольких рекламных кампаний (например, объявлений Facebook, объявлений Google и т. д.) создает разные URL-адреса с определенными параметрами UTM.

В результате у вас есть одна страница с несколькими вариациями (разными параметрами UTM), которые необходимо оптимизировать.

UTM-метки

Это проблема, поскольку каждый вариант URL-адреса считается уникальным объектом, и каждый запрос будет направлен на исходный сервер.

Соответственно, каждый запрос будет классифицироваться как промах кеша, даже если запрошенный контент был доступен в веб-кэше.

Это приводит к излишне низкому показателю попаданий в кэш.


NitroPack — самый простой способ добиться отличного коэффициента попадания в кэш

После всего, что мы рассмотрели, весь процесс достижения высокого коэффициента попаданий в кэш может показаться немного ошеломляющим.

Хорошей новостью является то, что если вы работаете с провайдером CDN, то большинство вещей, о которых я упомянул, например, заголовки управления кешем, возможно, уже позаботились о вас.

Для всего остального можно использовать плагин кэширования.

Например, NitroPack поставляется с готовыми функциями, которые гарантируют нашим пользователям высокий коэффициент попаданий в кэш. Это включает:

  • Cache Warmup имитирует органические посещения вашего веб-сайта, что автоматически приводит к тому, что NitroPack подготавливает оптимизированные (кешированные) версии вашего веб-сайта для настольных и мобильных устройств.
  • Cache Invalidation помечает кешированный контент как «устаревший», но продолжает обслуживать его до тех пор, пока не станет доступным новый оптимизированный контент. В результате ваши посетители всегда видят оптимизированный контент, даже если он ненадолго устарел.
  • Встроенный CDN, который избавляет вас от необходимости синхронизировать CDN с выбранным вами плагином кэширования. Часто это отнимает много времени, неудобно и может вызвать неожиданные проблемы.
  • Параметр «Игнорируемый параметр», который позволяет NitroPack по умолчанию игнорировать некоторые часто используемые параметры UTM (и другие), чтобы вам не приходилось беспокоиться при проведении маркетинговых кампаний.

Игнорируемые параметры

Но ты не обязан верить мне на слово. Протестируйте NitroPack бесплатно и убедитесь в его эффективности.