Настройка pdoTools для оптимизации MODX: ускорение сайта

Плохая производительность MODX — частая проблема интернет-магазинов на этой CMS. Основная причина — классический **N+1 запрос**: стандартный getResources для каждого TV-параметра выполняет отдельный запрос. При каталоге из 20 товаров это 30–50 запросов к БД, TTFB 800+ мс, высокий LCP и INP. Клиенты

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Настройка pdoTools для оптимизации MODX: ускорение сайта
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    982
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    995

Плохая производительность MODX — частая проблема интернет-магазинов на этой CMS. Основная причина — классический N+1 запрос: стандартный getResources для каждого TV-параметра выполняет отдельный запрос. При каталоге из 20 товаров это 30–50 запросов к БД, TTFB 800+ мс, высокий LCP и INP. Клиенты уходят, сервер падает при 50 пользователях. Решение — pdoTools: набор сниппетов (pdoResources, pdoMenu, pdoPage), которые работают напрямую с PDO и сокращают запросы до 1–3. Внедрение pdoTools ускоряет загрузку в 5–10 раз, снижает нагрузку на MySQL и затраты на хостинг до 30%. Наш опыт: 5 лет работы с MODX, 30+ успешных проектов. Обеспечиваем стабильность и улучшение Core Web Vitals.

Как pdoResources решает проблему N+1 запроса?

Стандартный getResources для выборки 20 ресурсов делает отдельные запросы на каждый TV-параметр — это классический N+1. pdoResources использует единый JOIN-запрос благодаря параметру &prepareTVs=1. Пример вызова:

[[pdoResources? &parents=`5` &resources=`-10` &showHidden=`0` &sortby=`menuindex` &sortdir=`ASC` &limit=`10` &includeTVs=`product_price,product_image` &prepareTVs=`1` &processTVs=`1` &tpl=`productCard` &tvPrefix=`` ]] 

Ключевой параметр — &prepareTVs=1, который загружает все TV одним запросом. Без него каждое TV тянет отдельный запрос, сводя преимущество на нет.

Когда pdoResources не даёт прироста?

Если на странице всего один-два ресурса без TV, разница между getResources и pdoResources минимальна. pdoResources оправдан на каталогах с десятками записей и множеством TV. Для простых меню или списков новостей с одним изображением можно оставить getResources — pdoResources не даст прироста, но и не навредит.

Настройка кэширования и парсера для максимальной производительности

Почему стоит заменить парсер на pdoParser?

Стандартный парсер MODX обрабатывает каждый тег последовательно, что создаёт задержки при большом количестве тегов на странице. pdoParser использует регулярные выражения и работает на 20–40% быстрее. Включить его можно в системных настройках:

// Система → Настройки → pdotools_parser_enable = 1 

«заменяет стандартный парсер и ускоряет обработку тегов на 20–40%» (pdoTools).

Кэш pdoTools: настройка

[[pdoResources? ... &cache=`1` &cacheTime=`1800` &cacheKey=`catalog_[[+GET.page:default=1]]_[[+GET.sort:default=price]]` ]] 

Уникальный ключ кэша включает GET-параметры — разные фильтры используют разные кэши, исключая конфликты. Время жизни кэша подбирается под частоту обновления данных: для каталога с редкими изменениями — 1 час, для новостей — 10 минут.

Как мы настраиваем pdoTools: пошаговый план

  1. Аудит текущего состояния: анализируем используемые сниппеты, количество запросов, время генерации страницы.
  2. Замена стандартных сниппетов: устанавливаем pdoTools, заменяем getResources на pdoResources с параметром &prepareTVs=1, Wayfinder на pdoMenu, Breadcrumbs на pdoBreadcrumbs.
  3. Настройка кэширования: для каждого сниппета включаем кэш с уникальным ключом, учитывающим GET-параметры.
  4. Включение pdoParser: активируем в системных настройках, проверяем совместимость с установленными компонентами.
  5. Тестирование производительности: замеряем TTFB, LCP, INP, количество запросов до и после.

Пример реального кейса: интернет-магазин мебели

Для клиента с каталогом из 300 товаров, где каждый товар имел 15 TV (цена, изображения, характеристики), стандартная страница списка товаров грузилась 6 секунд. После замены getResources на pdoResources с &prepareTVs=1 и включением pdoParser время загрузки упало до 0.8 секунды. Нагрузка на MySQL снизилась с 2000 запросов в минуту до 120. Дополнительно настроили кэширование с ключами по фильтрам и страницам — пагинация стала мгновенной.

Сравнение производительности getResources и pdoResources
Параметр getResources pdoResources
Количество запросов к БД 30–50 1–3
Время выполнения (20 ресурсов) ~500 мс ~50 мс
Поддержка кэширования Ограниченная Полная (гибкие ключи)
Работа с TV N+1 запрос Один JOIN

Типичные ошибки при настройке pdoTools

Ошибка Причина Решение
Медленная загрузка страницы Забыли &prepareTVs=1 Добавить параметр в вызов
Некэшируемые меню Не включён кэш для pdoMenu Установить &cache=1
Пагинация не работает с кэшем Не настроен &cacheKey для pdoPage Указать уникальный ключ с GET-параметрами

Что входит в настройку pdoTools?

При заказе услуги вы получаете:

  • полную замену стандартных сниппетов (getResources, Wayfinder, Breadcrumbs) на pdoResources, pdoMenu, pdoPage;
  • настройку кэширования каждого сниппета с учётом фильтров и пагинации;
  • активацию pdoParser и проверку его совместимости с текущими компонентами;
  • исправление типовых ошибок: неправильный &prepareTVs, отсутствие кэш-ключей;
  • краткую документацию по использованным параметрам и рекомендации по дальнейшей оптимизации (например, переход на headless или внедрение Edge Functions).

Мы поможем избавиться от тормозов на сайте — получите консультацию по оптимизации MODX. Наши инженеры проанализируют текущее состояние и предложат план действий.

Сроки и ожидаемые результаты

Замена стандартных сниппетов на pdoTools с настройкой кэширования — от 3 до 5 часов для среднего сайта. Для крупных проектов с кастомными шаблонами — до 2 дней.

После настройки pdoTools количество запросов к БД сокращается в 10–20 раз, TTFB снижается до 100–200 мс, LCP и INP приходят в норму. Это напрямую влияет на позиции в поиске и доход от продаж. Закажите настройку pdoTools сегодня и обеспечьте стабильную работу вашего магазина.