WordPress тормозит в админке — как ускорить
Если WordPress тормозит в админке, в 80% случаев виноваты не «медленный хостинг», а четыре вещи: Heartbeat API, тяжёлые плагины, дефицит памяти и раздутая таблица wp_options. Фронтенд может летать, а /wp-admin/ грузится по 10-15 секунд. Чинится без плагинов — правками в wp-config.php и functions.php.
Почему админка тормозит
Симптом узнаваемый: сайт для посетителей открывается быстро, а вход в /wp-admin/, список плагинов или редактор записей висят по 5-30 секунд. В логах часто видны частые запросы к admin-ajax.php. Прежде чем ставить плагины кеширования админки (обычно полумера), проверьте четыре причины ниже — от самой частой к редкой.
1. Heartbeat API
WordPress постоянно стучится сам в себя через admin-ajax.php: проверяет чужие блокировки записи, обновляет счётчики, держит сессию. По умолчанию каждые 15-60 секунд. На дешёвом shared-хостинге каждый такой запрос заново поднимает PHP и лезет в MySQL — админка «дышит», но процессор занят чужими вызовами.
Особенно болезненно на Beget и Timeweb на базовых тарифах: там PHP-FPM с ограничением процессов, и Heartbeat легко съедает весь пул. На Reg.ru (ISPmanager) картина чуть лучше, но на слабом VPS — то же самое.
2. Тяжёлые плагины в админке
Elementor, WooCommerce, Yoast SEO, Rank Math — все они вешают хуки на загрузку каждой страницы админки. Elementor проверяет лицензию и подтягивает виджеты даже там, где вы не редактируете страницу. WooCommerce на 1000+ товаров делает служебные запросы в БД при каждом входе в админку.
Бонусом — плагины статистики и аналитики, которые лезут во внешние API прямо из дашборда. Один такой плагин превращает загрузку консоли в ожидание ответа от стороннего сервера.
3. Мало памяти PHP
Если WP_MEMORY_LIMIT стоит 256M или меньше, а у вас WooCommerce + Elementor + пара SEO-плагинов — админка работает у самого края. Один тяжёлый список (например, импорт товаров) добивает: белый экран или «Fatal error: Allowed memory size exhausted». Подробно про этот сценарий я разбирал в отдельной статье про memory exhausted.
В админке памяти нужно больше, чем на фронтенде: грузится редактор блоков, список плагинов, медиатека. Без отдельного WP_MAX_MEMORY_LIMIT админка использует тот же лимит, что и посетители.
4. Раздутый wp_options и виджеты дашборда
Плагины любят писать в wp_options и ставить флаг autoload = yes. WordPress на каждом запросе тянет все autoload-записи в память. Когда их становится 1000+ и общий вес — пара мегабайт, каждый вход в админку начинается с тяжёлого SELECT.
Вторая подкожная проблема — виджеты главной консоли. «Новости WordPress», «Обзор событий» и виджеты плагинов делают внешние HTTP-запросы (RSS, API) при открытии /wp-admin/index.php. Если внешний сервер тупит — тупит ваш дашборд.
Как исправить пошагово
Шаг 1. Поднять лимит памяти
В wp-config.php перед строкой /* That's all, stop editing! */ добавьте:
define('WP_MEMORY_LIMIT', '512M');
define('WP_MAX_MEMORY_LIMIT', '512M');
Первое — для фронтенда, второе — для админки. Для WooCommerce с 1000+ товаров ставьте 512M минимум, для Elementor + WooCommerce — 768M.
На Beget это дублируется в панели: «Управление сайтами» → ваш сайт → «PHP» — там лимит должен быть не меньше. На Timeweb — раздел «PHP» → memory_limit. На Reg.ru (ISPmanager) — «Сайты» → ваш сайт → «PHP» → memory_limit. Если тариф режет память ниже нужного, правки в wp-config.php не помогут — поднимайте тариф.
memory_limit = -1 — это снимает ограничение полностью, и один зависший скрипт может уронить весь сервер. Ставьте конкретное значение.Шаг 2. Ограничить Heartbeat
Без плагина — в functions.php дочерней темы. Замедляем Heartbeat до 120 секунд и убираем его на странице редактирования записи:
add_filter('heartbeat_settings', function($settings) {
$settings['interval'] = 120;
return $settings;
});
// На странице редактирования Heartbeat часто не нужен
add_action('admin_enqueue_scripts', function() {
$screen = get_current_screen();
if ($screen && $screen->base === 'post') {
wp_deregister_script('heartbeat');
}
});
Если работаете один и чужие блокировки не нужны — можно выключить Heartbeat совсем: wp_deregister_script('heartbeat') без условий. Тогда автосохранение тоже перестанет работать, но для одиночного редактора это нормальный компромисс.
Шаг 3. Отключить лишние виджеты дашборда
В functions.php:
add_action('wp_dashboard_setup', function() {
remove_meta_box('dashboard_primary', 'dashboard', 'side'); // Новости WordPress
remove_meta_box('dashboard_secondary', 'dashboard', 'side'); // Обзор событий
remove_meta_box('dashboard_quick_press', 'dashboard', 'side'); // Быстрая публикация
remove_meta_box('dashboard_recent_drafts', 'dashboard', 'normal');
});
Виджеты плагинов убираются аналогично — их ID ищите через Query Monitor (см. шаг 4) на вкладке Hooks. После этого /wp-admin/index.php перестаёт делать внешние запросы и грузится моментально.
Шаг 4. Найти тормозящий плагин через Query Monitor
Поставьте бесплатный Query Monitor — единственный плагин диагностики, который ставлю временно, потом удаляю. Он показывает:
- какие хуки и плагины грузятся на каждой странице админки;
- время каждого SQL-запроса;
- внешние HTTP-запросы;
- потребление памяти.
Альтернатива без плагина — через WP-CLI:
# Список активных плагинов
wp plugin list --status=active --fields=name,status,version
# Проверить autoload в wp_options
wp db query "SELECT COUNT(*), SUM(LENGTH(option_value)) FROM wp_options WHERE autoload='yes';"
Если SUM(LENGTH(option_value)) больше 2-3 МБ — это уже проблема. Чистить только выборочно: удаляйте autoload-опции удалённых плагинов, не трогайте всё подряд.
Более подробно про общий подход к скорости — в статье «Как ускорить WordPress без плагинов»: PHP 8.x, серверное кеширование, WebP. Это про фронтенд, но часть шагов (PHP 8, чистка БД) разгружает и админку.
Проверка результата
/wp-admin/ в режиме инкогнито, очистив кеш браузера. В Chrome DevTools (F12) → Network → следите за admin-ajax.php: после правки Heartbeat запросов должно быть мало и с интервалом около 120 секунд, а не каждую секунду. Время загрузки /wp-admin/plugins.php должно упасть с 10-15 до 1-3 секунд.Сравните до и после через Query Monitor: вкладка «Timing» покажет общее время генерации страницы. Если было 8 секунд, стало 1.5 — цель достигнута.
Когда способ не сработает
Хостинг режет ресурсы ниже потребностей. На Beget «Блог» или Timeweb «Shared+» WooCommerce с 5000 товаров всегда будет тормозить в админке — памяти и процессов просто не хватает. Тут правки кода бесполезны, нужно переходить на VPS или более высокий тариф.
Заражённый сайт. Если в wp-content/uploads или темах лежат странные PHP-файлы, а в логах доступа видны запросы к непонятным URL — админка тормозит из-за фоновых вредоносных процессов. Сначала чистка после взлома, потом ускорение.
База данных огромна. Если wp_postmeta больше 500 МБ, десятки тысяч ревизий и спам-комментариев — правки wp-config.php не помогут. Нужна чистка: удаление ревизий, оптимизация таблиц. На больших магазинах это делают по расписанию.
Elementor с огромным шаблоном. Если одна страница собрана из 300+ виджетов, её открытие в редакторе всегда будет долгим — редактор гоняет весь DOM туда-сюда. Лечится только переработкой страницы или переходом на более лёгкий билдер.
Частые вопросы
wp-config.php ограничено сверху панелью. Поднимайте в панели, и только потом дублируйте в конфиге.memory_limit от 512M и желательно PHP 8.2+. Но если тормозит только редактор конкретной страницы, а остальная админка летает — виноват размер шаблона (300+ виджетов на одной странице). Разбивайте страницу на переиспользуемые шаблоны.wp_deregister_script('heartbeat') в functions.php. Но перестанет работать автосохранение записей и чужие блокировки при совместной редактуре. Если редактируете один — смело отключайте. Если несколько редакторов — оставляйте, но с интервалом 120-300 секунд.wp db query "SELECT option_name, LENGTH(option_value) AS size FROM wp_options WHERE autoload='yes' ORDER BY size DESC LIMIT 20;". В топе обычно опции плагинов статистики, кеширования и бэкапов. Удалите плагины, которые не используете, через wp plugin delete <slug> — это уберёт и их autoload-опции.Админка всё равно тормозит?
Проведу аудит, найду что именно грузит wp-admin и починю за 1 день. Без установки лишних плагинов.