Кэш ответов
Кэширование целых HTTP-ответов. По умолчанию выключено, включается двумя настройками.
| Настройка | По умолчанию | |
|---|---|---|
pageblocks_http_cache | выкл | Включает |
pageblocks_http_cache_ttl | 3600 | Время жизни в секундах |
Это не то же самое, что сервис Cache, который хранит значения, которые вы туда сами положили. Здесь хранятся отрендеренные страницы, и происходит это автоматически.
Что кэшируется
Только ответ, у которого выполняется всё три:
- запрос
GET, - от анонимного посетителя — не авторизован ни в текущем контексте, ни в
mgr, - ответ 200.
Всё остальное проходит мимо: формы, менеджер, страница залогиненного пользователя, 404.
Почему только анонимные
Закэшированная страница общая для всех, кто попросит этот адрес. Один авторизованный ответ в таком хранилище — и следующий посетитель получит чужое приветствие или чужую корзину. Правило узкое намеренно, и расширить его настройкой нельзя: цена ошибки — отдать данные одного пользователя другому.
Ключ — контекст плюс хэш адреса запроса, поэтому строка запроса входит в ключ: /catalog?page=2 и /catalog?page=3 — разные записи.
Инвалидация происходит сама
Сохранение любой модели сбрасывает весь кэш ответов. Не нужно размечать страницы тегами, вычислять, каких адресов коснулась правка, и дописывать хук при добавлении таблицы.
Это намеренно грубо. Точная инвалидация — то место, где кэши ответов и ломаются: страницу, которая не обновилась, отлаживать заметно дороже, чем пережить повторное наполнение кэша. На сайте, где контент меняется пару раз в час, это ничего не стоит; на сайте, где что-то пишет в базу на каждом запросе, кэш не удержит ничего — и это признак, что фича такому сайту не подходит, а не повод усложнять правило.
Восстановление резервной копии тоже сбрасывает кэш.
Неудачный сброс проглатывается намеренно: проблема с кэшем не должна ломать сохранение модели или запрос.
Где это стоит
Поиск в кэше происходит в маршрутизации, до передачи запроса дальше: попадание стоит одного чтения и до контроллера не доходит. Запись — при отправке ответа и только для 200.
Записи живут в кэше MODX под pageblocks/http, поэтому очистка кэша сайта их убирает.
Когда включать
Имеет смысл для сайта, который в основном анонимно читают: каталог, блог, лендинг под нагрузкой. Бесполезно для личного кабинета, магазина с корзиной и всего, где посетитель залогинен: такие запросы не кэшируются никогда, а проверка стоит немного на каждом.
Убедитесь, что он вообще работает
Включение ничего не меняет внешне, поэтому легко решить, что стало лучше. Измерьте: загрузите страницу гостем дважды и сравните время. Если вторая загрузка не быстрее, ничего не кэшируется — скорее всего, что-то пишет в базу на каждом запросе и тут же сбрасывает хранилище.