
Прогрев кэша
Вкладка Прогрев кэша позволяет управлять конфигурациями прогрева — заранее вычислять и кэшировать данные фильтров, чтобы страницы каталога открывались мгновенно с первого обращения.
Зачем нужен прогрев
При первом открытии страницы каталога mFilter выполняет три тяжёлые операции:
- baseIds — получение списка всех ID товаров в категории
- filter values — вычисление доступных значений фильтров (бренды, цвета, размеры)
- suggestions — подсчёт количества товаров для каждого значения фильтра
Для больших каталогов (10 000+ товаров) это может занимать от 5 до 60 секунд. Прогрев выполняет эти операции заранее в фоне и сохраняет результаты в кэш.
Таблица конфигураций
| Колонка | Описание |
|---|---|
| ID | Идентификатор конфигурации |
| Название | Имя конфигурации |
| Element | Сниппет получения данных (msProducts, pdoResources) |
| Страниц | Количество привязанных страниц каталога |
| Авто | Пометка «Авто» если конфигурация создана автоматически |
| Последний прогрев | Дата и длительность последнего прогрева |
| Статус | Активна / Выключена |
Создание конфигурации
Автоматическое
При первом посещении любой страницы каталога с фильтрами конфигурация создаётся автоматически. В таблице появится запись с пометкой Авто и привязкой к этой странице.
Ручное
- Нажмите Добавить конфигурацию
- Укажите название (необязательно — сгенерируется из element и даты)
- Выберите Element (msProducts, pdoResources и т.д.)
- Вставьте вызов сниппета в поле «Вызов сниппета» и нажмите Распарсить — параметры заполнятся автоматически
- Выберите страницы каталога в дереве ресурсов
- Нажмите Сохранить
Парсинг вызова сниппета
Поддерживаются три формата:
Fenom:
{'!mFilter'|snippet:['element' => 'msProducts', 'parents' => $_modx->resource.id, 'limit' => 12]}MODX-тег:
[[!mFilter? &element=`msProducts` &parents=`5` &limit=`12`]]JSON:
{"element": "msProducts", "parents": 5, "limit": 12}Редактор конфигурации
Левая колонка
- Название — произвольное имя для удобства
- Element — сниппет получения данных (msProducts, pdoResources или другой)
- Вызов сниппета — текстовое поле для вставки кода вызова и парсинга параметров
- Параметры — таблица key-value с параметрами сниппета
- Активна — включение/выключение конфигурации
Правая колонка
- Дерево ресурсов — выбор страниц каталога (с lazy loading и кнопками массового выделения)
Подсказка
При отметке родительской категории все дочерние загружаются и отмечаются автоматически.
Запуск прогрева
Из админки (синхронно)
Нажмите Прогреть всё — прогрев выполнится в текущем запросе. Подходит для небольших каталогов или тестирования.
Через Scheduler (в фоне)
Нажмите Через Scheduler — создаётся задание в планировщике, которое выполнится по крону. Рекомендуется для больших каталогов.
Прогрев отдельной конфигурации
Нажмите иконку молнии в строке конфигурации — прогреет только эту конфигурацию.
Чекбокс «+ счётчики»
Включён по умолчанию. При прогреве дополнительно вычисляет и кэширует:
- Значения фильтров (используются формой фильтров mFilterForm)
- Фасетные счётчики (количество товаров для каждого значения)
Без этого чекбокса кэшируются только baseIds.
Рекуррентный прогрев
Таск mfl_warmup по умолчанию настроен как рекуррентный — запускается каждые 50 минут. При стандартном TTL кэша (3600 сек = 1 час) кэш обновляется с запасом 10 минут и никогда не протухает.
Настройка интервала
Интервал и TTL настраиваются под конкретный проект:
| Сценарий | TTL | Интервал | Описание |
|---|---|---|---|
| Небольшой каталог | 3600 | 3000 | По умолчанию |
| Средний каталог | 7200 | 6000 | Прогрев каждые 100 мин |
| Большой каталог | 14400 | 10800 | Прогрев каждые 3 часа |
| Редкие обновления | 86400 | 43200 | Прогрев 2 раза в сутки |
- TTL — системная настройка
mfilter.cache_lifetime - Интервал — поле
intervalтаскаmfl_warmupв Scheduler
Важно
Интервал прогрева должен быть меньше TTL кэша. Если прогрев каталога занимает N минут, интервал должен быть: TTL - N - запас.
Что происходит при обновлении товаров
| Сценарий | Действие |
|---|---|
| Регулярный импорт цен/остатков | Ничего — рекуррентный таск обновит кэш автоматически |
| Массовый импорт товаров | Запустить прогрев вручную через «Через Scheduler» |
| Изменение структуры фильтров | Очистить кэш (Обслуживание → Очистить кэш) + запустить прогрев |
