Heartbeat API в WordPress часто замечают только тогда, когда админка начинает лишний раз дергать сервер, а вкладки с редактором ведут себя нестабильно. На слабом хостинге это проявляется как лишняя нагрузка, на многопользовательском сайте — как конфликты при редактировании, если кто-то слишком агрессивно режет частоту запросов. Полностью отключать Heartbeat без понимания последствий не стоит: он отвечает не только за «пульс» админки, но и за автосохранение, уведомления и проверку блокировки записи.
Когда Heartbeat API действительно мешает
Сначала стоит убедиться, что проблема именно в Heartbeat, а не в тяжелом плагине, медленной базе или плохом объектном кеше. Типичный сценарий — в браузере открыта консоль, и в Network видно регулярные запросы к admin-ajax.php с действием heartbeat. Интервал обычно небольшой, поэтому на страницах с несколькими открытыми вкладками это превращается в постоянный фоновой трафик.
Признаки, по которым можно не гадать
- в редакторе записей автосохранение работает, но админка заметно «шумит» в Network;
- на странице редактирования много запросов к
admin-ajax.phpдаже без активных действий; - на слабом сервере заметны пики CPU именно в момент работы в админке;
- при одновременном редактировании записей иногда появляются предупреждения о блокировке поста другим пользователем.
Если нужно проверить источник нагрузки быстро, откройте DevTools → Network и отфильтруйте запросы по heartbeat. Если запросы идут регулярно, а нагрузка растет именно в админке, есть смысл ограничить частоту, а не отключать механизм целиком.
Что лучше: отключить, замедлить или оставить как есть
Для большинства сайтов правильнее не выключать Heartbeat полностью, а уменьшить частоту в админке и на экранах редактирования. Полное отключение оправдано только на очень специфичных установках, где автосохранение и блокировка записей не нужны или решаются иначе. На обычном сайте это плохая идея: вы сами себе создадите риск потерять несохраненный текст.
| Подход | Что дает | Компромисс |
|---|---|---|
| Оставить как есть | Полная совместимость, автосохранение и блокировка записей работают штатно | Больше фоновых запросов в админке |
| Снизить частоту | Меньше нагрузки, поведение редактора сохраняется | Чуть реже обновляются уведомления и статус блокировки |
| Отключить полностью | Минимум запросов | Риск сломать автосохранение и контроль одновременного редактирования |
Пошаговое решение через код
Самый предсказуемый вариант — ограничить Heartbeat только в админке. Для этого не нужен отдельный плагин, достаточно небольшого кода в functions.php дочерней темы или в своем мини-плагине. Если у вас уже есть mu-plugin для технических правок, лучше положить код туда, чтобы он не зависел от темы.
Вариант 1: увеличить интервал Heartbeat в админке
Этот способ обычно безопасен: WordPress продолжит работать, но запросы станут реже. Для большинства сайтов достаточно интервала в 60 секунд вместо стандартного более частого опроса.
add_filter( 'heartbeat_settings', function( $settings ) {
if ( is_admin() ) {
$settings['interval'] = 60;
}
return $settings;
} );
Если сайт активно редактируется несколькими авторами, не ставьте слишком большой интервал. Слишком редкие запросы ухудшают актуальность уведомлений и могут сделать блокировку записей менее удобной.
Вариант 2: отключить Heartbeat только на экранах, где он не нужен
Иногда проблема возникает не в редакторе, а, например, на страницах списка записей или в отдельных разделах админки. Тогда лучше отключать Heartbeat точечно через wp_deregister_script() только там, где он действительно не нужен. Этот вариант требует аккуратности: не трогайте экран редактирования записей, если не уверены в последствиях.
add_action( 'admin_enqueue_scripts', function( $hook ) {
if ( $hook === 'edit.php' ) {
wp_deregister_script( 'heartbeat' );
}
} );
Этот пример стоит применять только после проверки. Если на странице списка записей у вас нет плагинов, завязанных на Heartbeat, такой шаг может быть оправдан. Но если вы используете плагины с живыми уведомлениями или статусами, они могут перестать обновляться.
Вариант 3: полностью отключить Heartbeat
Полное отключение — крайняя мера. Делать это стоит только если вы понимаете, что автосохранение и блокировка записей вам не нужны, либо вы готовы принять их потерю. В большинстве случаев лучше не идти этим путем.
add_action( 'init', function() {
wp_deregister_script( 'heartbeat' );
}, 1 );
Если после такого кода редактор начал вести себя странно, верните Heartbeat обратно и используйте ограничение частоты вместо полного отключения.
Как проверить, что решение сработало
Проверка нужна не только по ощущениям. После внесения изменений откройте админку и посмотрите, как изменилось поведение запросов.
- Откройте DevTools → Network и убедитесь, что запросы к
admin-ajax.phpс действиемheartbeatстали реже или исчезли там, где вы их отключили. - Откройте редактор записи и проверьте, работает ли автосохранение: оставьте текст без сохранения и дождитесь штатного автосейва.
- Если на сайте несколько редакторов, попробуйте открыть одну и ту же запись в двух вкладках и убедиться, что предупреждение о блокировке не пропало.
- Проверьте, не сломались ли плагины, которые показывают уведомления в админке или используют живое обновление статусов.
Если вы снизили частоту, а не отключили механизм, в Network должно остаться меньше запросов, но редактор по-прежнему должен сохранять черновики и показывать актуальный статус записи.
Частые ошибки и как их исправить
Отключили Heartbeat на всем сайте без проверки
Это самая частая ошибка. После этого часть пользователей замечает, что автосохранение перестало работать как ожидается, а блокировка записей стала бесполезной. Исправление простое: уберите глобальное отключение и замените его на увеличение интервала или точечное отключение на отдельных экранах.
Добавили код в тему, а потом потеряли его после обновления
Если правка лежит в родительской теме, она исчезнет при обновлении. Для технических изменений используйте дочернюю тему или mu-plugin. Это не вопрос удобства, а вопрос воспроизводимости: вы должны точно знать, где живет код.
Слишком сильно увеличили интервал
Интервал в несколько минут может выглядеть привлекательным, но на практике делает интерфейс менее предсказуемым. Уведомления приходят с задержкой, а состояние блокировки записи обновляется медленно. Если цель — снизить нагрузку, начинайте с 60 секунд и проверяйте результат.
Не проверили плагины, завязанные на admin-ajax
Некоторые плагины используют Heartbeat для своих внутренних обновлений. После отключения они могут перестать показывать статусы, предупреждения или подсказки. Поэтому сначала проверьте, какие плагины активны в админке, и только потом режьте механизм.
Практика безопасности и производительности
Если Heartbeat действительно создает лишнюю нагрузку, не ограничивайтесь только им. Проверьте, нет ли в админке тяжелых плагинов, которые делают запросы на каждом экране, и посмотрите на работу кеша объектов, если он у вас включен. Иногда проблема не в самом Heartbeat, а в том, что каждый его запрос запускает дорогую логику плагина.
Для сайтов с большим количеством авторов лучше выбирать мягкую настройку: уменьшить частоту, оставить автосохранение и не ломать блокировку записей. Это дешевле в поддержке, чем потом объяснять редакторам, почему черновик не сохранился вовремя.
Если вам нужно системно чистить админку и убирать лишние технические хвосты, иногда удобнее использовать профильный инструмент вроде Clearfy Pro, но и там важно не отключать все подряд. Любая оптимизация WordPress должна начинаться с проверки, что именно вы убираете и какой функционал при этом теряете.