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

Кэширование

mFilter использует многоуровневую систему кэширования для оптимизации производительности.

Типы кэша

1. Кэш фильтров (БД)

Хранится в таблице mfl_cache. Кэшируются:

  • suggestions — доступные значения фильтров с количеством
  • filter_values — значения для построения формы

Формат ключа:

suggestions_{resourceId}_{filterHash}
filter_values_{resourceId}_{depth}

2. Кэш роутера (файл)

Хранится в core/cache/mfilter/filter_pages.cache.php.

Содержит маппинг URI → ID ресурса для быстрого определения страниц фильтрации.

php
<?php
// mFilter filter pages cache
return [
    'catalog/' => 5,
    'catalog/phones/' => 12,
    'catalog/tablets/' => 15,
];

3. Кэш слагов (память)

Хранится в памяти во время выполнения запроса:

  • slugCache — value → slug
  • valueCache — slug → value

Предзагружается при парсинге URL для минимизации запросов к БД.

Системные настройки

НастройкаОписаниеПо умолчанию
mfilter.cache_enabledВключить кэшированиеtrue
mfilter.cache_lifetimeВремя жизни кэша фильтров (сек)3600
mfilter.cache_router_lifetimeВремя жизни кэша роутера (сек)86400

Очистка кэша

Из админки

Обслуживание → Очистить кэш

Очищает:

  • Все записи из таблицы mfl_cache
  • Файл filter_pages.cache.php

Программно

php
$mfilter = $modx->services->get('mfilter');

// Очистить весь кэш
$mfilter->clearCache();

// Очистить кэш конкретной страницы
$mfilter->invalidatePageCache($resourceId);

// Перестроить кэш роутера
$mfilter->rebuildRouterCache();

Через Filter сервис

php
$filter = $mfilter->getFilter();

// Очистить кэш для ресурса
$filter->clearCache($resourceId);

// Очистить весь кэш фильтров
$filter->clearCache(0);

Автоматическая инвалидация

Кэш автоматически очищается при:

СобытиеЧто очищается
Сохранение набора фильтровКэш страниц набора
Удаление набора фильтровКэш всех страниц
Изменение привязок набораКэш роутера

Ручная инвалидация при изменении товаров

При массовом обновлении товаров рекомендуется очистить кэш:

php
// После импорта товаров
$mfilter = $modx->services->get('mfilter');
$mfilter->clearCache();

Scheduler (фоновые задачи)

При установленном Scheduler доступна задача перестройки кэша.

Запуск задачи

php
$mfilter = $modx->services->get('mfilter');
$taskId = $mfilter->scheduleCacheRebuild();

Параметры задачи

ПараметрОписаниеПо умолчанию
clear_firstОчистить кэш перед перестройкойtrue
rebuild_routerПерестроить кэш роутераtrue
rebuild_filtersПерестроить кэш фильтровtrue

Отключение кэша

Глобально

Системные настройки → mfilter.cache_enabled → Нет

Для отладки

При включённом профайлере (mfilter.debug_profiler) в логах видно:

  • suggestions.cacheHit — попадание в кэш
  • suggestions.cacheCheck — время проверки кэша

Размер кэша

Проверка в админке

mFilter → Обслуживание → Статус системы

Показывает:

  • Количество записей в кэше
  • Количество файлов кэша

Программно

php
// Количество записей в БД
$count = $modx->getCount('MFilter\\Model\\MflCache');

// Файлы кэша
$cachePath = MODX_CORE_PATH . 'cache/mfilter/';
$files = glob($cachePath . '*');

Рекомендации

Для небольших каталогов (до 1000 товаров)

  • Используйте настройки по умолчанию
  • Кэш обновится автоматически при истечении TTL

Для средних каталогов (1000-10000 товаров)

  • Увеличьте cache_lifetime до 7200-14400
  • Настройте очистку кэша после импорта

Для больших каталогов (10000+ товаров)

  • Используйте Scheduler для фоновой перестройки
  • Настройте cron-задачу на ночное время:
php
// Задача Scheduler
$mfilter->scheduleCacheRebuild();

При частых обновлениях товаров

Если товары обновляются часто (цены, наличие), уменьшите TTL:

mfilter.cache_lifetime = 1800

При редких обновлениях

Увеличьте TTL для максимальной производительности:

mfilter.cache_lifetime = 86400
mfilter.cache_router_lifetime = 604800

Структура таблицы mfl_cache

ПолеТипОписание
idintПервичный ключ
cache_keyvarchar(255)Уникальный ключ кэша
cache_valuemediumtextСериализованные данные (JSON)
created_atdatetimeВремя создания
expires_atdatetimeВремя истечения

Индексы:

  • uk_cache_key — уникальный индекс по ключу
  • idx_expires — индекс для очистки устаревших записей