Прискорення MODX: від діагностики до продакшену
MODX Revolution — гнучка CMS, але без правильного налаштування кешування та конфігурації сервера вона легко впирається в TTFB 2–4 секунди навіть на простих сайтах. TTFB 2–4 секунди — типова картина для сайтів, де кожен запит генерує сотні SQL-запитів через парсинг тегів [[*]]/[[+]]. Відсутність об'єктного кешу погіршує ситуацію: файловий кеш не справляється з навантаженням, дискові операції stat() додають затримки. Ми, команда з 5-річним досвідом та 100+ успішних проєктів з прискорення MODX, допоможемо скоротити час завантаження до 200 мс та пройти Core Web Vitals. Економія на ресурсах хостингу після оптимізації зазвичай сягає 30-50%. Отримайте консультацію з оптимізації MODX — зв'яжіться з нами для безкоштовного аудиту.
Як визначити вузьке місце MODX?
Перший крок — зрозуміти, що саме гальмує. MODX логує повільні запити, якщо включити в core/config/config.inc.php:
define('MODX_CONFIG_KEY', 'config'); // в System Settings: // log_level = 4 (DEBUG) // log_target = FILE Більш точний інструмент — xDebug + Blackfire або просто EXPLAIN в MySQL/MariaDB для запитів, які MODX генерує при рендері сторінки. Типові проблеми:
-
modResourceчитає всі поля, включаючиcontent, навіть коли потрібен лишеpagetitle -
getResourcesбезlimitробитьSELECT *по всіх дочірніх ресурсах - снипети без
&cache=1виконуються на кожен запит
Досвідчені інженери також перевіряють налаштування PHP-FPM та OPcache — часто проблема не в самому MODX, а в конфігурації оточення. Вкладення в оптимізацію зазвичай окупаються вже через 2-3 місяці за рахунок зниження навантаження на сервер.
Кешування на рівні MODX
Системний кеш зберігається в core/cache/. Для production переконайтеся, що директорія має права 755 і не змонтована через tmpfs без достатнього розміру.
Оптимальні налаштування в System Settings:
| Параметр | Рекомендоване значення |
|---|---|
cache_resource_handler |
xPDOFileCache (за замовчуванням) або Redis |
cache_default_lifetime |
3600–86400 |
cache_context_settings |
1 |
compress_js |
1 |
compress_css |
1 |
Чому Redis кращий за файловий кеш?
Для Redis-кешу встановлюється пакет Redis (modmore або аналог) і в core/config/config.inc.php додається:
$config_options = [ 'cache_path' => MODX_CORE_PATH . 'cache/', 'cache_default_handler' => 'xPDORedisCache', 'cache_xpdo_handler' => 'xPDORedisCache', 'redis_host' => '127.0.0.1', 'redis_port' => 6379, 'redis_db' => 0, ]; Після перемикання на Redis TTFB знижується на 30–50% на високонавантажених сайтах, тому що відпадають дискові операції на stat() файлів кешу. Порівняння:
| Тип кешу | Середній TTFB | Навантаження на диск |
|---|---|---|
| Файловий | 800–1200 мс | Висока |
| Redis | 200–400 мс | Немає |
Згідно з даними Redis, in-memory зберігання даних значно прискорює операції читання. На практиці це знижує витрати на серверні ресурси на 30-40%.
Як оптимізувати снипети та pdoTools?
Некешовані виклики [[!SnippetName]] — головне джерело повільності. Аудит через пошук по шаблонах і чанках: команда grep -r '\[\[!' по папці елементів. Правила:
- Якщо снипет не залежить від сесії/корзини/користувача — робимо кешованим
[[SnippetName? &cache="1" &cacheExpires="3600"]] -
getResources, pdoTools кешуються через вбудований параметр&cache -
FormItтаLogin— завжди некешовані, виносити в окремі чанки
pdoTools замість getResources — критично для сайтів з великими каталогами. pdoTools використовує JOIN замість множинних запитів. Приклад виклику: [[pdoResources? &parents=15 &depth=2 &limit=20 &sortby=publishedon &sortdir=DESC &cache=1 &cacheExpires=1800]]
Приклад конфігурації OPcache
Для максимальної продуктивності PHP-OPcache використовуйте цю конфігурацію:
; /etc/php/8.1/fpm/conf.d/10-opcache.ini opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.validate_timestamps=0 opcache.revalidate_freq=0 opcache.fast_shutdown=1 ; /etc/php/8.1/fpm/pool.d/modx.conf [modx] pm = dynamic pm.max_children = 20 pm.start_servers = 5 pm.min_spare_servers = 3 pm.max_spare_servers = 8 pm.max_requests = 500 request_terminate_timeout = 30s pm.max_requests = 500 — запобігає витокам пам'яті в довгоживучих снипетах.
Як налаштувати Redis для MODX: покрокова інструкція
- Встановіть пакет Redis через менеджер пакетів MODX (наприклад, Redis від modmore).
- Внесіть зміни в
config.inc.php, як показано вище. - У системних налаштуваннях MODX встановіть
cache_resource_handlerвxPDORedisCache. - Очистіть існуючий кеш через адміністративну панель.
- Перевірте, що Redis сервер запущений і доступний на
127.0.0.1:6379. - Протестуйте швидкість завантаження сторінки — зазвичай TTFB падає в 2-3 рази.
Конфігурація Nginx для MODX
server { location ~* \.(js|css|png|jpg|webp|woff2|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; access_log off; } location ^~ /core/ { deny all; } gzip on; gzip_types text/plain text/css application/json application/javascript image/svg+xml; gzip_min_length 1024; gzip_comp_level 5; } Індекси бази даних
MODX не додає всі потрібні індекси автоматично. Для сайтів з 10 000+ ресурсів додаємо:
ALTER TABLE modx_site_content ADD INDEX idx_parent_published (parent, published), ADD INDEX idx_context_published (context_key, published), ADD INDEX idx_publishedon (publishedon); Після додавання індексів EXPLAIN SELECT на типовий запит getResources покаже ref замість ALL. Це знижує навантаження на сервер і економить до 40% ресурсів хостингу, що зменшує витрати на інфраструктуру.
Що входить в оптимізацію MODX під ключ?
У базову оптимізацію входить: аудит поточної конфігурації (логи, профілювання, EXPLAIN), налаштування Redis-кешу та перенесення файлового кешу, оптимізація PHP-FPM, OPcache, Nginx, додавання необхідних індексів у MySQL, стиснення CSS/JS та налаштування браузерного кешування, перевірка Core Web Vitals до та після, документація щодо внесених змін. Для складних випадків — переписування некешованих снипетів на кешовані. Гарантуємо покращення TTFB мінімум на 50%. Результати підтверджуються вимірами Core Web Vitals.
Терміни робіт
Базова оптимізація (кеш, PHP-FPM, nginx, індекси): 2–3 дні. Переведення некешованих снипетів на кешовані + аудит шаблонів: 3–5 днів залежно від кількості елементів. Перехід на Redis-кеш з тестуванням: 1 день додатково. Кожен етап фіксується вимірами.
Замовте аудит продуктивності MODX
Залиште заявку — ми безкоштовно проаналізуємо ваш сайт і запропонуємо план оптимізації. Гарантуємо результат: підтверджені виміри Core Web Vitals до та після. Зв'яжіться з нами, щоб почати. Оптимізація знижує витрати на інфраструктуру та прискорює сайт, що позитивно впливає на конверсію.







