Skip to content

Latest commit

 

History

History
128 lines (80 loc) · 4.12 KB

File metadata and controls

128 lines (80 loc) · 4.12 KB

Кэширование и производительность

EE_FrameWork использует единый слой CacheManager, который умеет работать с файловым backend и Redis.

Какие типы кэша есть

  • route cache;
  • HTML cache;
  • block cache.

Что важно помнить

  • админка не должна кэшироваться как публичная часть;
  • HTML cache обязан учитывать контекст запроса;
  • route cache нужно уметь реально выключать и очищать;
  • кэш нельзя считать заменой корректному lifecycle.

CacheManager

Ключевые возможности:

  • единый API для file/redis backend;
  • namespace/version изоляция;
  • context-aware HTML cache;
  • selective invalidation по section.

Контекст HTML cache включает:

  • scheme
  • host
  • language
  • param
  • $_GET

Именно поэтому HTML, сгенерированный для одного host/scheme, не должен утекать на другой host.

Route cache

Router умеет кэшировать разбор маршрута.

Используйте это аккуратно:

  • после деплоя route cache нужно чистить;
  • при активной разработке route cache проще держать выключенным;
  • на production он полезен, только если вы контролируете инвалидацию.

Redis vs file cache

File cache

Подходит, если:

  • приложение развёрнуто на одном хосте;
  • кэш умеренный по объёму;
  • нужна простая эксплуатация.

Redis

Подходит, если:

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

Что логировать про производительность

Минимум:

  • длительность тяжёлых сценариев;
  • время rebuild index/filter lifecycle;
  • ошибки Redis/file cache;
  • cache invalidation события.

Для production-практики полезно отдельно логировать:

  • долгие импорты;
  • route cache очистки;
  • массовые lifecycle rebuild;
  • cache stampede-like сценарии.

Типовые ошибки

Неправильный ключ HTML cache

Симптом:

  • пользователь видит контент другого host или языка.

Причина:

  • ключ не учитывает контекст запроса.

Route cache после деплоя

Симптом:

  • новый контроллер не виден;
  • старый маршрут продолжает вести не туда.

Причина:

  • не очищен route cache.

Кэш без инвалидации

Симптом:

  • данные в БД уже обновились, а интерфейс показывает старое.

Причина:

  • save-flow не чистит затронутый HTML cache.

Практический режим для разработки

Во время активной разработки:

  • route cache лучше выключать;
  • HTML cache либо выключать, либо чистить очень часто;
  • если страница ведёт не туда, сначала очищать route cache и смотреть logs/router_error/....

Практический режим для production

  • включать только те виды кэша, поведение которых вы понимаете;
  • держать отдельные admin actions для очистки route/html cache;
  • не использовать глобальный destructive flush для shared Redis;
  • фиксировать namespace/version проекта.