Skip to content
mFilter
mFilter
Фасетная фильтрация для MODX 3 с поддержкой SEO URL
  • MODX 3
  • PHP 8.1
  • Vue 3
  1. Компоненты
  2. mFilter
  3. Интерфейс админки
  4. Прогрев кэша

Прогрев кэша ​

Прогрев заранее получает список товаров страницы каталога и кладёт его в кэш. Действует только на страницах, где mFilter вызван с &element: прогретый список ускоряет и первое открытие страницы, и фильтрацию без перезагрузки.

Устаревает с версии 1.4.0

Значения фильтров и счётчики значений с версии 1.4.0 считает индекс фасетов. Прогрев оставлен для списков товаров страниц. После стабилизации индекса фасетов будет упрощён или удалён.

В админке это блок Прогрев baseIds (устаревает) на вкладке «Обслуживание», по умолчанию свёрнутый, — список конфигураций прогрева. Конфигурация — это вызов mFilter (элемент и его параметры) и страницы, для которых он прогревается.

Зачем нужен прогрев ​

Прогрев убирает из запроса страницы самый долгий на большом каталоге шаг — получение списка товаров. На странице с &element mFilter сначала получает от элемента список всех товаров раздела, потом фильтрует его и делит на страницы. Прогрев выполняет первый шаг заранее, и страница берёт готовый список из кэша.

Само первое открытие страницы список в кэш не кладёт — только заводит конфигурацию. В кэш его кладут прогрев и первый запрос фильтрации без перезагрузки.

Подсказка

Флажок «+ счётчики» прогревает ещё и счётчики значений.

Таблица конфигураций ​

КолонкаОписание
IDИдентификатор конфигурации
НазваниеИмя конфигурации
ElementСниппет, который выбирает товары (msProducts, pdoResources)
СтраницСколько страниц каталога привязано
АвтоПометка «Авто», если конфигурация создана автоматически
Последний прогревДата и длительность последнего прогрева
СтатусАктивна / Выключена
ДействияПрогреть (молния), изменить, удалить

Показываются первые 25 конфигураций по имени.

Создание конфигурации ​

Автоматическое ​

Конфигурация заводится сама при первом открытии страницы с &element, если списка товаров ещё нет в кэше:

  • страницы с одинаковым вызовом попадают в одну конфигурацию;
  • каждая сортировка, которую открывали посетители, получает свою конфигурацию: сортировка входит в ключ кэша;
  • имя — Авто: <элемент> (resource <id>), в таблице пометка Авто;
  • если вызов на странице изменился, параметры авто-конфигурации обновляются сами. Ручные конфигурации не меняются.

Ручное ​

  1. Нажмите Добавить конфигурацию.
  2. Укажите название — необязательно, без него имя соберётся из элемента и даты.
  3. Выберите Element: msProducts, pdoResources и т. д.
  4. Вставьте вызов сниппета в поле «Вызов сниппета» и нажмите Распарсить — параметры заполнятся сами.
  5. Выберите страницы каталога в дереве ресурсов.
  6. Нажмите Сохранить.

Укажите сортировку

Ключ кэша страницы всегда содержит сортировку — по умолчанию sortby = pagetitle, sortdir = ASC. Добавьте их в параметры так же, как на странице. Без них прогрев запишет список под другим ключом: страница его не найдёт и заведёт рядом свою авто-конфигурацию.

Проверка: после сохранения откройте ручную конфигурацию — поле Hash в редакторе должно совпасть с Hash авто-конфигурации той же страницы.

parents не учитывается

Прогрев всегда берёт товары самой страницы, parents из вызова игнорируется. Не прогревайте страницы, которые выводят через &parents товары другого раздела: после прогрева они покажут не тот список.

Разбор вызова сниппета ​

Поле «Вызов сниппета» понимает три формата.

Fenom:

fenom
{'!mFilter' | snippet : ['element' => 'msProducts', 'limit' => 12, 'sortby' => 'pagetitle', 'sortdir' => 'ASC']}

MODX-тег:

[[!mFilter? &element=`msProducts` &limit=`12` &sortby=`pagetitle` &sortdir=`ASC`]]

JSON:

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 не совпал, см. Ручное создание.