Skip to content

Кэш ответов

Кэширование целых HTTP-ответов. По умолчанию выключено, включается двумя настройками.

НастройкаПо умолчанию
pageblocks_http_cacheвыклВключает
pageblocks_http_cache_ttl3600Время жизни в секундах

Это не то же самое, что сервис Cache, который хранит значения, которые вы туда сами положили. Здесь хранятся отрендеренные страницы, и происходит это автоматически.

Что кэшируется

Только ответ, у которого выполняется всё три:

  • запрос GET,
  • от анонимного посетителя — не авторизован ни в текущем контексте, ни в mgr,
  • ответ 200.

Всё остальное проходит мимо: формы, менеджер, страница залогиненного пользователя, 404.

Почему только анонимные

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

Ключ — контекст плюс хэш адреса запроса, поэтому строка запроса входит в ключ: /catalog?page=2 и /catalog?page=3 — разные записи.

Инвалидация происходит сама

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

Это намеренно грубо. Точная инвалидация — то место, где кэши ответов и ломаются: страницу, которая не обновилась, отлаживать заметно дороже, чем пережить повторное наполнение кэша. На сайте, где контент меняется пару раз в час, это ничего не стоит; на сайте, где что-то пишет в базу на каждом запросе, кэш не удержит ничего — и это признак, что фича такому сайту не подходит, а не повод усложнять правило.

Восстановление резервной копии тоже сбрасывает кэш.

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

Где это стоит

Поиск в кэше происходит в маршрутизации, до передачи запроса дальше: попадание стоит одного чтения и до контроллера не доходит. Запись — при отправке ответа и только для 200.

Записи живут в кэше MODX под pageblocks/http, поэтому очистка кэша сайта их убирает.

Когда включать

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

Убедитесь, что он вообще работает

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

© PageBlocks 2019-present