
Прогрев кэша
Прогрев заранее получает список товаров страницы каталога и кладёт его в кэш. Действует только на страницах, где mFilter вызван с &element: прогретый список ускоряет и первое открытие страницы, и фильтрацию без перезагрузки.
Устаревает с версии 1.4.0
Значения фильтров и счётчики значений с версии 1.4.0 считает индекс фасетов. Прогрев оставлен для списков товаров страниц. После стабилизации индекса фасетов будет упрощён или удалён.
В админке это блок Прогрев baseIds (устаревает) на вкладке «Обслуживание», по умолчанию свёрнутый, — список конфигураций прогрева. Конфигурация — это вызов mFilter (элемент и его параметры) и страницы, для которых он прогревается.
Зачем нужен прогрев
Прогрев убирает из запроса страницы самый долгий на большом каталоге шаг — получение списка товаров. На странице с &element mFilter сначала получает от элемента список всех товаров раздела, потом фильтрует его и делит на страницы. Прогрев выполняет первый шаг заранее, и страница берёт готовый список из кэша.
Само первое открытие страницы список в кэш не кладёт — только заводит конфигурацию. В кэш его кладут прогрев и первый запрос фильтрации без перезагрузки.
Подсказка
Флажок «+ счётчики» прогревает ещё и счётчики значений.
Таблица конфигураций
| Колонка | Описание |
|---|---|
| ID | Идентификатор конфигурации |
| Название | Имя конфигурации |
| Element | Сниппет, который выбирает товары (msProducts, pdoResources) |
| Страниц | Сколько страниц каталога привязано |
| Авто | Пометка «Авто», если конфигурация создана автоматически |
| Последний прогрев | Дата и длительность последнего прогрева |
| Статус | Активна / Выключена |
| Действия | Прогреть (молния), изменить, удалить |
Показываются первые 25 конфигураций по имени.
Создание конфигурации
Автоматическое
Конфигурация заводится сама при первом открытии страницы с &element, если списка товаров ещё нет в кэше:
- страницы с одинаковым вызовом попадают в одну конфигурацию;
- каждая сортировка, которую открывали посетители, получает свою конфигурацию: сортировка входит в ключ кэша;
- имя —
Авто: <элемент> (resource <id>), в таблице пометка Авто; - если вызов на странице изменился, параметры авто-конфигурации обновляются сами. Ручные конфигурации не меняются.
Ручное
- Нажмите Добавить конфигурацию.
- Укажите название — необязательно, без него имя соберётся из элемента и даты.
- Выберите Element: msProducts, pdoResources и т. д.
- Вставьте вызов сниппета в поле «Вызов сниппета» и нажмите Распарсить — параметры заполнятся сами.
- Выберите страницы каталога в дереве ресурсов.
- Нажмите Сохранить.
Укажите сортировку
Ключ кэша страницы всегда содержит сортировку — по умолчанию sortby = pagetitle, sortdir = ASC. Добавьте их в параметры так же, как на странице. Без них прогрев запишет список под другим ключом: страница его не найдёт и заведёт рядом свою авто-конфигурацию.
Проверка: после сохранения откройте ручную конфигурацию — поле Hash в редакторе должно совпасть с Hash авто-конфигурации той же страницы.
parents не учитывается
Прогрев всегда берёт товары самой страницы, parents из вызова игнорируется. Не прогревайте страницы, которые выводят через &parents товары другого раздела: после прогрева они покажут не тот список.
Разбор вызова сниппета
Поле «Вызов сниппета» понимает три формата.
Fenom:
{'!mFilter' | snippet : ['element' => 'msProducts', 'limit' => 12, 'sortby' => 'pagetitle', 'sortdir' => 'ASC']}MODX-тег:
[[!mFilter? &element=`msProducts` &limit=`12` &sortby=`pagetitle` &sortdir=`ASC`]]JSON:
{"element": "msProducts", "limit": 12, "sortby": "pagetitle", "sortdir": "ASC"}При разборе:
- переменные Fenom вроде
$_modx->resource.idпропускаются; - вложенный массив, например
'where' => [...], разбирается неверно — передайтеwhereстрокой JSON.
После разбора проверьте таблицу параметров.
Редактор конфигурации
| Поле | Что делает |
|---|---|
| Название | Имя для удобства |
| Element | Сниппет, который выбирает товары: msProducts, pdoResources или другой. Элемент из разобранного вызова заменяет выбранный в списке |
| Вызов сниппета | Сюда вставляют вызов, чтобы разобрать параметры |
| Параметры | Таблица «параметр — значение» |
| Активна | Выключенную конфигурацию не прогревают ни задача, ни кнопка «Прогреть всё». Молния в строке прогревает и её |
| Страницы каталога | Дерево ресурсов для выбора страниц. Товары, неопубликованные и удалённые ресурсы в нём не показываются. Есть поиск и кнопки «Выделить всё» и «Снять всё». При отметке родительской категории все дочерние загружаются и отмечаются сами |
Запуск прогрева
| Кнопка | Что делает |
|---|---|
| Прогреть всё | Прогревает в текущем запросе — страницу нужно дождаться. Долгий прогрев может упереться в таймаут веб-сервера, тогда запускайте через Scheduler |
| Через Scheduler | Переносит ближайший запуск задачи mfl_warmup на «сейчас», прогрев выполнится при следующем срабатывании cron. Кнопка видна, только если установлен Scheduler |
| Молния в строке | Прогревает только эту конфигурацию |
Флажок «+ счётчики»
Вместе со списком товаров прогревает счётчики значений — их читает страница без выбранных фильтров. Включён по умолчанию. Без него прогревается только список товаров.
Повторяющийся прогрев
Задача mfl_warmup запускается каждые 50 минут, следующий запуск отсчитывается от окончания предыдущего. При сроке кэша по умолчанию, 3600 секунд, остаётся запас 10 минут — если прогрев в них укладывается. Кроме того, прогрев запускается сразу после пересборки индекса фасетов, если есть активные конфигурации.
Каждый запуск пишет в журнал ошибок MODX две строки — это отчёт, а не ошибка:
[mFilter Warmup] Starting warmup (+ suggestions)
[mFilter Warmup] Done: 3/3 configs, 0 failed, 34969ms(+ suggestions) — прогрев со счётчиками, последнее число — время запуска в миллисекундах.
Настройка интервала
| Сценарий | Срок кэша | Интервал |
|---|---|---|
| Небольшой каталог, по умолчанию | 3600 | +50 minutes |
| Средний каталог | 7200 | +100 minutes |
| Большой каталог | 14400 | +3 hours |
| Редкие обновления | 86400 | +12 hours |
- Срок кэша — системная настройка
mfilter.cache_lifetime, в секундах. Если выключить кэш настройкойmfilter.cache_enabled, прогрев не действует. - Интервал — поле
intervalзадачиmfl_warmupв Scheduler. Только строкой дляstrtotime(): число он прочтёт как год или время суток, и задача перестанет запускаться. Обновление mFilter возвращает интервал к+50 minutes— после обновления поменяйте его снова.
Интервал меньше срока кэша
Интервал прогрева должен быть меньше срока кэша. Если прогрев каталога занимает N минут, интервал — срок кэша − N − запас.
Когда прогретые списки устаревают
| Что произошло | Что будет |
|---|---|
| Регулярный импорт цен и остатков | Ничего делать не нужно. Список товаров и его порядок обновятся при ближайшем прогреве — до 50 минут. Без Scheduler — когда истечёт кэш |
| Импорт товаров через MiniShop3 | С Scheduler — ничего: индекс фасетов будет пересобран, прогрев перенесётся на «сейчас». Без Scheduler новые товары появятся в списках, когда истечёт кэш, — или нажмите «Прогреть всё» |
| Импорт в обход MODX | Нажмите кнопку «Переиндексация» в шапке админки. Она очищает весь кэш вместе с прогретыми списками — страницы остаются непрогретыми до ближайшего прогрева |
| Изменение фильтров в наборе | Ничего: индекс по изменённым фильтрам будет пересобран, кэш сбросится, прогрев перенесётся на «сейчас» |
| Сохранение набора или страницы каталога, «Очистить кэш» | Прогретые списки этих страниц стираются. Страницы остаются непрогретыми до ближайшего прогрева |
Если прогрев не помогает
- В журнале строка
Warmup: element "…" returned no IDs for resource N — cache not written— элемент с параметрами конфигурации не вернул ни одного товара, и список не записан. Проверьте параметры. - Рядом с ручной конфигурацией появилась авто-конфигурация той же страницы — Hash не совпал, см. Ручное создание.
