Имеет ли смысл использовать кэширование Varnish и Browser?
Я немного озадачен тем, что лучше всего использовать Varnish: я видел много сайтов, где я знаю, что они использовали Varnish, которые имели Cache-Control: no-store, no-cache, must-revalidate
Заголовки HTTP активированы. Содержание их веб-сайта не меняется уже долгое время - так почему же они не используют кеширование в браузере? Может быть, они хотят лучше контролировать контент, если им нужно быстро что-то изменить, что в противном случае находилось бы в устаревшем состоянии в кэше браузера?
Итак, в основном я хотел бы знать, должен ли я использовать кэширование Varnish AND Browser или только Varnish для веб-сайта, который обслуживает контент, который не изменяется? Есть ли здесь какое-то правило, что было бы "лучшей практикой"? Обычно я бы пошел на кэширование Varnish AND Browser, но вышеупомянутые веб-сайты, которые я видел, запутали меня в этом.
2 ответа
Вы должны использовать оба, и это две совершенно разные вещи.
- Кеш браузера - это кеш на вашем компьютере. Его основная цель - сохранение полосы пропускания, снижение задержки за счет использования ресурсов, которые уже были просмотрены / загружены.
- Varnish cache - это кеш на сервере, где размещен сайт. Его основная цель - уменьшить нагрузку на сервер от запуска сценариев с интенсивной загрузкой процессора (например, PHP)
Два кэша могут иметь разное время жизни для кэшированной записи / разные политики кэширования, и это нормально. Это зависит от характера ресурса, который вы кэшируете.
Страницы (HTML)
Просто потому что ты видишь Cache-Control: no-store, no-cache, must-revalidate
при проверке сайта, например, через curl
, это не значит, что нет лака и он не кеширует вещи.
Возьмите Magento 2, например. Magento сам отправляет:
Cache-Control: max-age=86400, public, s-maxage=86400
Это то, что видит Лак. Таким образом, страница будет кэшироваться соответствующим образом в течение 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 по умолчанию использует серверную часть ОЗУ (хотя вы можете разбить кеш на статические файлы).
"Может быть, они хотят лучше контролировать контент, если им нужно быстро что-то изменить, что в противном случае было бы в устаревшем состоянии в кэше браузера?"
Вы ответили на свой вопрос прямо там;)
Это неприятно, когда публикуете новый контент для аннулирования кэшей, над которыми вы не обязательно имеете контроль, и быстрая аннулирование старых кэшей является большим благом для быстрого развертывания нового контента. Если вы не хотите беспокоиться об этом или нет, вы можете разрешить кешированию браузеров снизить нагрузку на вашу инфраструктуру.