Site icon 8HOST.COM

Основы кэширования: терминология, основные HTTP-заголовки и стратегии

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

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

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

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

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

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

Преимущества кэширования

Эффективное кэширование помогает как пользователям, так и контент-провайдерам. Вот некоторые из преимуществ:

Основные термины

Ниже приведены некоторые из наиболее распространенных терминов из области кэширования:

Что можно кэшировать?

Некоторый контент легче кэшировать. Для большинства сайтов кэшировать лучше:

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

А эти элементы нужно кэшировать осторожно:

Кэшировать не рекомендуется:

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

Где хранится кэш?

Контент кэшируется в разные точки:

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

Заголовки кэширования

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

Большая часть поведения при кэшировании определяется политикой, которую устанавливает владелец контента. Эти политики в основном формулируются с помощью HTTP-заголовков.

Благодаря различным версиям протокола HTTP появилось несколько разных заголовков кэширования с различными уровнями сложности. Вот основные:

Немного о заголовке Vary

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

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

Такие элементы, как User-Agent, на первый взгляд могут показаться хорошим способом разграничения между браузерами мобильных устройств и настольных компьютеров. Однако, поскольку строки User-Agent нестандартны, в результате может получиться множество версий одного и того же контента в промежуточных кэшах с очень низким коэффициентом попадания в кеш. Заголовок Vary следует использовать экономно, особенно если у вас нет возможности нормализовать запросы в промежуточных кэшах, которыми вы управляете (что может быть возможно, например, если вы используете сеть доставки контента).

Как флаги Cache-Control влияют на кэширование?

Выше упоминался заголовок Cache-Control, который используется для определения политики кэширования. С помощью этого заголовка можно установить несколько инструкций политики. Инструкции разделяются запятыми.

Вот некоторые из параметров Cache-Control, которые вы можете использовать для определения политики кэширования контента:

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

Опция no-store переопределяет no-cache, если они обе присутствуют в политике. Для ответов на неавторизованные запросы используется public. Для ответов на аутентифицированные запросы применяется private. Их можно переопределить, включив в заголовок Cache-Control противоположную опцию.

Разработка стратегии кэширования

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

Общие проблемы

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

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

Общие рекомендации

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

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

А вот справка по использованию общих заголовков кэширования:

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

Цель состоит в том, чтобы по возможности перемещать контент в первые категории при сохранении приемлемого уровня точности.

Заключение

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

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