Назад | Перейти на главную страницу

Есть ли смысл использовать и Varnish, и кеширование браузера?

Я немного смущен тем, что лучше всего использовать Varnish: я видел много сайтов, где я знаю, что они использовали Varnish, на которых Cache-Control: no-store, no-cache, must-revalidate Заголовки HTTP активированы. Содержание их веб-сайтов не меняется уже давно - так почему же они не используют кеширование в браузере? Может быть, они хотят лучше контролировать контент, если им нужно быстро что-то изменить, что в противном случае было бы устаревшим в кеше браузера?

Итак, в основном я хотел бы знать, следует ли мне использовать Varnish И кеширование браузера или только Varnish для веб-сайта, который обслуживает контент, который не изменяется? Есть ли здесь какое-то правило, что было бы «лучшей практикой»? Обычно я бы выбрал Varnish И кеширование в браузере, но вышеупомянутые веб-сайты, которые я видел, меня это смущали.

Вы должны использовать оба, и это две совершенно разные вещи.

  • Кэш браузера - это кеш на вашем компьютере. Его основная цель - сохранить пропускную способность, уменьшить задержку за счет использования ресурсов, которые уже были просмотрены / загружены.
  • Кеш Varnish - это кеш на сервере, на котором размещен веб-сайт. Его основная цель - снизить нагрузку на сервер от запуска скриптов, интенсивно использующих ЦП (например, PHP).

Два кэша могут иметь разное время жизни для кэшированной записи / другой политики кеширования, и это нормально. Это зависит от характера кэшируемого ресурса.

Страницы (HTML)

Просто потому, что ты видишь Cache-Control: no-store, no-cache, must-revalidate при проверке веб-сайта, например через curl, это не значит, что нет Varnish и он не кеширует вещи.

Возьмем, к примеру, Magento 2. Сам Magento отправляет:

Cache-Control: max-age=86400, public, s-maxage=86400

Это то, что Лак видит. Таким образом, страница будет кэшироваться Varnish в течение 1 дня. Однако в Varnish VCL для Magento 2 он изменит Cache-Control на выходе, чтобы браузеры вообще не кешировали. Итак, ответ, что ты увидим:

Cache-Control: no-store, no-cache, must-revalidate, max-age=0

Почему это так:

  • Чтобы исключить тяжелую работу PHP-движка, Varnish кэширует страницы и доставляет их из своего кеша.
  • Браузеры должны всегда получать свежие страницы (мы говорим о страницах продуктов и т. Д.), Поэтому они вообще не должны кэшироваться.
  • Когда страница продукта обновляется (администратором), Magento обращается к Varnish, чтобы очистить кешированную страницу. По очевидным причинам он не может сказать "удалить меня из кеша" кешам браузера, поэтому браузеры не должны кэшировать страницу.

Статические активы

В браузере

Обычно вы хотите кэшировать статические ресурсы браузером, поэтому для этого типа ресурсов вы увидите заголовки Far Future Expires, например следующие:

Expires: Sat, 03 Aug 2019 14:24:01 GMT
Cache-Control: public, max-age=30672000

В лаке

Для этих ресурсов многие люди любят настраивать Varnish так, чтобы они не кешировались. Это связано с тем, что в PHP нет тяжелой работы по выдаче этих файлов сервером, поэтому нет смысла вообще кэшировать их на сервере. Особенно с учетом того, что кеш Varnish по умолчанию использует бэкэнд RAM (вы можете разделить кеш для статических файлов хотя).

«Может быть, они хотят лучше контролировать контент, если им нужно что-то быстро изменить, что в противном случае было бы в устаревшем состоянии в кеше браузера?»

Вы тут же ответили на свой вопрос;)

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