Кэширование в web, php и
symfony
Морозов Александр
План семинара
● Клиентское кэширование
○ Cache-Control
○ Выбор правил Cache-Control
○ Управление HTTP кэшем в Symfony
○ Управление временем действия HTTP кэша в Symfony
○ Замечания по HTTP кэшированию
○ Валидация в Symfony при помощи ETag, Last-Modified
○ Отпитимизация валидации в Symfony
● Кэширование с использованием ESI (Edge Side Includes)
● Кэширование через обратный прокси Symfony
Типы кэширования
HTTP Caching (+Browser caching)
Proxy Caching
Reverse proxy
Server-side
Варианты кэширования в WEB
browser
browser cache
browser
browser cache
browser
browser cache
proxy cache
php app
reverse proxy cache
Клиентское кэширование
Кэш браузера:
Expires
Last-Modified
ETag
Cache-Control
Cache-Control:
max-age=n - срок годности ответа, сек.
public - любой контент можно сохранять (перекрывается max-age)
private - контент разрешается сохранять только в браузере, запрещено
промежуточное кэширование
no-cache - обязательная проверка изменений файла
no-store - полный запрет кэширования
Выбор правил Cache-Control
Управление HTTP кэшем в symfony
Cache-Control:
Управление временем действия HTTP кэша
через Cache-Control Header:
через Expires Header:
Другие методы управления HTTP кэшем в
Symfony
Замечания по HTTP кэшированию
Используем кэширование с GET, HEAD
Не используем с PUT, POST, DELETE
не определены заголовки Cache-Control: no-cache
Cache-Control пустой Cache-Control: private,
must-revalidate
есть Cache-Control, не указано
public или private Cache-Control: private
Валидация при помощи ETag
Валидация при помощи Last-Modified
Оптимизация валидации в Symfony
Кэширование через ESI
Кэширование через обратный прокси
Symfony встроенный reverse proxy
Symfony + Varnish
varnish
web server
symfonyclient
cache hit
regular hit
Еще о клиентском кэшировании
кэширование в local/session stoarage
File API
(FileSystem API, File Api, )
Кэширование Байт-кода
Alternative PHP Cache (APC)
eAccelerator
PhpExpress
XCache
Zend OPcache
Nginx как обратный кэширующий прокси
client
Redis (remote dictionary server)
Redis + Symfony
Memcached
LeaseWeb/LswMemcacheBundle
заголовки
статичных
страниц
заголовки меню
категорий
заголовки меню
производителей
сущности со
слайдами из БД
последняя
новость
последние
поступления
рекомендованные
товары
Кэширование в Web, php и symfony
Кэширование в Web, php и symfony
Кэширование в Web, php и symfony

Кэширование в Web, php и symfony

Editor's Notes

  • #4 Кэширование можно разделить на 4 основных группы: HTTP кэширование, как правило через заголовки, сюда же стоит отнести всевозможные методы кэшитрования в браузере Proxy кэширование, Прокси обслуживают сотни или тысячи пользователей; большие корпорации и интернет-провайдеры часто настраивают их на своих файрволах или используют как отдельные устройства. Прокси-кэши являются своего рода общей кэш-памятью (shared cache): вместо обслуживания одного человека, они работают с большим числом пользователей и поэтому очень хороши в сокращении времени ожидания и сетевого трафика. В основном, из-за того, что популярный контент запрашивается много раз. Reverse proxy — тип прокси-сервера, который ретранслирует запросы клиентов из внешней сети на один или несколько серверов, логически расположенных во внутренней сети. При этом для клиента это выглядит так, будто запрашиваемые ресурсы находятся непосредственно там. Реверс прокси умеют кэшировать данные, обрабатывать http-заголовки, распределять нагрузку между различными серверами. Для кэширования даных непосредственно на сервере используется множество различных технологий и библиотек, например Redis, RabbitMQ, Memcached и других.