Если в админке WordPress постоянно дергаются запросы к admin-ajax.php, а вкладка браузера с редактором или списком записей заметно грузит сервер, первым кандидатом на проверку обычно становится Heartbeat API. Это штатный механизм WordPress: он синхронизирует автосохранение, уведомления, блокировки постов и часть событий в панели управления. Проблема не в самом Heartbeat, а в том, что на слабом хостинге, в перегруженной админке или при большом количестве открытых вкладок он начинает создавать лишний фоновой трафик.
Когда Heartbeat действительно стоит трогать
Отключать его «на всякий случай» не нужно. Сначала посмотрите на симптомы. Если в браузерной консоли или в сетевых запросах видно регулярное обращение к wp-admin/admin-ajax.php, а в редакторе Gutenberg автосохранение работает с задержкой, это еще не повод рубить механизм целиком. Иногда достаточно уменьшить частоту запросов только в админке.
Типичные признаки проблемы
- вкладка
adminв браузере постоянно отправляет AJAX-запросы даже без действий пользователя; - в редакторе заметны подвисания при наборе текста или переключении между блоками;
- на shared-хостинге растет нагрузка именно в момент активной работы в админке;
- в журнале медленных запросов встречается
admin-ajax.phpс частыми вызовами Heartbeat; - открытые одновременно страницы редактирования одного и того же поста конфликтуют из-за блокировки записи.
Диагностика: что именно нагружает сайт
Перед изменениями полезно понять, где Heartbeat нужен, а где его можно ослабить. В WordPress он работает в трех зонах: admin, post и front. Чаще всего мешает именно админка и экран редактирования записи.
Проверка простая:
- Откройте инструменты разработчика в браузере.
- Перейдите на страницу редактирования записи или в список постов.
- Отфильтруйте запросы по
admin-ajax.php. - Посмотрите, как часто идут запросы и что меняется после простоя 1–2 минуты.
Если вы видите регулярные запросы каждые 15–60 секунд, это нормальное поведение. Вопрос в том, нужна ли вам именно такая частота и все ли зоны должны работать одинаково активно.
Как отключить Heartbeat точечно, а не ломать админку
Самый безопасный путь — не отключать механизм полностью, а ограничить его в тех местах, где он не нужен. Для этого можно использовать фильтр heartbeat_settings и, при необходимости, отключить Heartbeat только на отдельных экранах через wp_deregister_script(). Но с последним нужно быть аккуратнее: если убрать скрипт без понимания сценария, можно потерять автосохранение и блокировку редактирования.
Вариант 1: увеличить интервал Heartbeat
Это хороший компромисс, если проблема именно в частоте запросов. Код можно добавить в мини-плагин или в functions.php дочерней темы, но для постоянной настройки лучше отдельный mu-plugin.
<?php
add_filter( 'heartbeat_settings', function( $settings ) {
if ( is_admin() ) {
$settings['interval'] = 60; // по умолчанию обычно чаще, здесь увеличиваем интервал
}
return $settings;
} );
Такой вариант снижает количество фоновых запросов, но не отключает автосохранение и уведомления полностью. Для большинства сайтов этого уже достаточно.
Вариант 2: отключить Heartbeat на фронтенде
Если тема или плагины по ошибке подключают Heartbeat на публичной части сайта, это почти всегда лишнее. На фронтенде он обычно не нужен, если у вас нет специфической логики в реальном времени.
<?php
add_action( 'init', function() {
if ( ! is_admin() ) {
wp_deregister_script( 'heartbeat' );
}
} );
Этот код отключает скрипт только вне админки. Но прежде чем применять его, проверьте, не завязан ли у вас на Heartbeat какой-то кастомный функционал в публичной части — например, live-обновление данных через сторонний плагин.
Вариант 3: отключить Heartbeat в админке на отдельных экранах
Если нагрузка идет только со страницы списка записей или в редакторе, можно ограничить Heartbeat именно там. Это уже более точечная настройка, и она полезнее, чем глобальное отключение.
<?php
add_action( 'current_screen', function( $screen ) {
if ( ! is_admin() || ! $screen ) {
return;
}
// Пример: отключаем только на экране списка записей.
if ( 'edit-post' === $screen->id ) {
wp_deregister_script( 'heartbeat' );
}
} );
Здесь важно не переусердствовать. На экране редактирования записи Heartbeat нужен чаще всего для автосохранения и предупреждения о конфликте редактирования. Отключать его там стоит только если вы точно понимаете последствия.
Сравнение подходов
| Подход | Что делает | Компромисс |
|---|---|---|
| Увеличить интервал | Снижает частоту AJAX-запросов | Автосохранение и блокировки остаются, но реагируют реже |
| Отключить на фронтенде | Убирает лишний скрипт с публичной части | Нужно проверить, не использует ли его кастомный код |
| Отключить на отдельных экранах | Снимает нагрузку только там, где она мешает | Можно случайно отключить нужные функции редактора |
Пошаговое решение без лишнего риска
- Сначала проверьте, где именно идут запросы
admin-ajax.php. - Если проблема только в частоте, увеличьте интервал через
heartbeat_settings. - Если Heartbeat замечен на фронтенде, отключите его только там.
- Если нагрузка идет из конкретного экрана админки, ограничьте скрипт точечно.
- После изменений протестируйте автосохранение, блокировку записи и поведение редактора.
Для сайтов с несколькими редакторами лучше не отключать Heartbeat в редакторе полностью. Конфликт блокировки записи — это как раз тот случай, когда механизм экономит время и предотвращает перезапись чужой работы.
Как проверить, что решение сработало
Проверка должна быть практической, а не «страница открывается — значит все хорошо».
- Откройте редактор и посмотрите в Network, уменьшилось ли число запросов к
admin-ajax.php. - Проверьте автосохранение: внесите правку, подождите несколько минут, убедитесь, что черновик обновился.
- Откройте две вкладки с одной и той же записью и посмотрите, появляется ли предупреждение о блокировке редактирования.
- Если отключали Heartbeat на фронтенде, проверьте публичные страницы на наличие ошибок JavaScript и неработающих виджетов.
Если после изменения настроек редактор стал вести себя нестабильно, верните конфигурацию назад и проверьте, не подключает ли Heartbeat какой-то плагин. Иногда проблема не в WordPress, а в расширении, которое использует AJAX-опрос слишком агрессивно.
Частые ошибки и как их исправить
Полное отключение без проверки сценариев
Самая частая ошибка — удалить Heartbeat целиком, а потом удивляться, что автосохранение работает странно или пропали предупреждения о конфликте редактирования. Если сайт редактируют несколько человек, это плохая идея.
Правка в родительской теме
Если код добавлен в functions.php активной темы, он может потеряться после обновления. Для технической настройки лучше использовать мини-плагин или mu-plugin.
Отключение наугад через плагины оптимизации
Некоторые плагины умеют отключать Heartbeat, но делают это слишком грубо. Перед включением такой опции проверьте, можно ли ограничить ее только для фронтенда или только для админки. Если нужен более широкий набор настроек по чистке WordPress, иногда удобнее смотреть в сторону инструментов уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy.
Игнорирование нагрузки от других AJAX-запросов
Не каждый частый запрос в админке связан именно с Heartbeat. Перед изменениями убедитесь, что нагрузку не создают другие плагины, которые дергают admin-ajax.php по своему расписанию.
Безопасность и производительность: что учитывать
Heartbeat сам по себе не уязвимость. Но если вы снижаете его частоту или отключаете, делайте это осознанно. На сайтах с несколькими редакторами лучше сохранить хотя бы базовую работу в редакторе. На однопользовательских проектах можно смелее снижать интервал, если это реально уменьшает нагрузку.
Еще один практический момент: если у вас уже есть кеширование, оптимизация скриптов и тяжелая админка с десятками плагинов, Heartbeat может быть лишь одним из источников проблемы. Не стоит ожидать, что одна настройка снимет все тормоза. Сначала уберите лишние фоновые запросы, потом проверьте, не упирается ли сайт в медленный PHP, базу данных или сторонние API.
Если нужен более широкий контроль над технической чисткой сайта, дублями и лишними запросами, имеет смысл смотреть на комплексные инструменты, а не собирать все вручную. Но для Heartbeat чаще всего достаточно точечной настройки и проверки результата в браузере.