Heartbeat API в WordPress полезен, но на слабом хостинге или в перегруженной админке он быстро становится источником лишних AJAX-запросов. Чаще всего проблема заметна не в фронтенде, а в редакторе записей, списке постов и на страницах с несколькими открытыми вкладками. Если сайт начинает дергать admin-ajax.php слишком часто, имеет смысл не «ломать» Heartbeat полностью, а ограничить его там, где он действительно не нужен.
Когда Heartbeat API становится проблемой
Симптомы обычно одинаковые: в панели администратора растет число запросов, редактор подтормаживает, а на слабом сервере иногда появляются задержки при автосохранении. Это не всегда ошибка WordPress. Иногда виноваты тяжелые плагины, но Heartbeat усиливает эффект, потому что регулярно отправляет запросы для автосохранения, синхронизации статуса и уведомлений.
Что именно стоит проверить сначала
- открыт ли редактор Gutenberg или классический редактор на нескольких вкладках;
- есть ли в браузере постоянные запросы к
/wp-admin/admin-ajax.php; - не растет ли время ответа в админке именно при наборе текста или простое;
- не конфликтует ли автосохранение с плагинами кэша, безопасности или редакторами контента.
Если запросы идут редко и админка работает нормально, отключать Heartbeat целиком не нужно. В WordPress это один из тех механизмов, которые лучше ограничивать, а не вырезать без разбора.
Диагностика: как понять, что виноват именно Heartbeat
Самый практичный способ — открыть DevTools в браузере и посмотреть вкладку Network. Если в списке регулярно появляются запросы к admin-ajax.php с интервалом в несколько секунд, а нагрузка ощущается именно в админке, Heartbeat участвует в проблеме. Дополнительно можно временно отключить сторонние плагины в тестовой среде и сравнить поведение.
Для более точной проверки полезно посмотреть, не идет ли нагрузка только на страницах редактирования. Heartbeat в WordPress работает не везде одинаково: на фронтенде он обычно не нужен, а в админке может быть полезен для автосохранения и предупреждений о блокировке записи другим пользователем.
Как отключить Heartbeat API точечно
Лучший вариант — не выключать механизм полностью, а уменьшить частоту или отключить его на отдельных экранах. Для этого можно использовать фильтр heartbeat_settings и, при необходимости, отключать скрипт только в админке через wp_deregister_script(). Такой подход безопаснее, чем грубое удаление всего подряд.
Вариант 1: увеличить интервал Heartbeat
Если проблема в частоте запросов, а не в самом механизме, достаточно увеличить интервал. Это снижает число обращений к серверу, но сохраняет автосохранение и базовую синхронизацию.
<?php
add_filter( 'heartbeat_settings', function( $settings ) {
$settings['interval'] = 60; // по умолчанию обычно меньше
return $settings;
} );Такой код лучше добавлять в мини-плагин или в functions.php дочерней темы. Если тема обновляется часто, мини-плагин надежнее.
Вариант 2: отключить Heartbeat только на фронтенде
На публичной части сайта Heartbeat чаще всего не нужен. Если у вас нет фронтенд-редактора, live-автосохранения или других функций, завязанных на него, можно убрать скрипт только вне админки.
<?php
add_action( 'wp_enqueue_scripts', function() {
wp_deregister_script( 'heartbeat' );
}, 100 );Это не затрагивает админку и не мешает редактору. Но если у вас есть плагин, который использует Heartbeat на фронтенде, сначала проверьте его документацию и тестовую копию сайта.
Вариант 3: отключить Heartbeat в админке на отдельных экранах
Если нагрузка идет именно из редактора, можно отключать Heartbeat только там, где он не нужен. Например, на страницах списка записей или в некоторых пользовательских разделах админки.
<?php
add_action( 'admin_enqueue_scripts', function( $hook ) {
if ( in_array( $hook, array( 'edit.php', 'upload.php' ), true ) ) {
wp_deregister_script( 'heartbeat' );
}
} );Этот вариант стоит применять аккуратно. На экране редактирования записей Heartbeat полезен для предупреждения о конфликте редактирования и автосохранения, поэтому там его лучше не отключать без необходимости.
Сравнение подходов
| Подход | Что делает | Риск | Когда выбирать |
|---|---|---|---|
| Увеличить интервал | Снижает частоту запросов | Минимальный | Если нужна мягкая оптимизация |
| Отключить на фронтенде | Убирает лишние запросы вне админки | Низкий | Если фронтенд-редактирование не используется |
| Отключить на части экранов | Снимает нагрузку в конкретных разделах | Средний | Если тормозит только отдельная админка |
Пошаговое решение без лишнего риска
- Сделайте резервную копию или проверьте изменения на staging-сайте.
- Определите, где именно идет нагрузка: фронтенд, список записей, редактор, медиа-библиотека.
- Сначала попробуйте увеличить интервал Heartbeat до 60 секунд.
- Если этого мало, отключите скрипт только на фронтенде.
- Если проблема локализована в конкретном экране админки, ограничьте Heartbeat только там.
- После каждого изменения проверьте автосохранение и поведение редактора.
Как проверить, что решение сработало
Проверка должна быть практической, а не «на глаз». Откройте редактор записи и посмотрите, как часто идут запросы к admin-ajax.php. После изменения интервала они должны стать реже. Если Heartbeat отключен на фронтенде, в Network на публичной странице запросов к нему быть не должно.
Дополнительно проверьте:
- сохраняется ли запись вручную без ошибок;
- работает ли автосохранение в редакторе;
- не исчезло ли предупреждение о том, что запись редактируется в другой вкладке;
- не появились ли ошибки JavaScript в консоли.
Если после отключения Heartbeat редактор перестал сохранять изменения или появились странные задержки, значит, на сайте есть плагин, который на него завязан. В этом случае возвращайте исходное состояние и ищите зависимость по списку активных расширений.
Частые ошибки и как их исправить
Отключили Heartbeat полностью и сломали редактор
Такое бывает, если скрипт убрали без проверки, а сайт использует автосохранение, блокировку записей или сторонний плагин для совместного редактирования. Исправление простое: верните Heartbeat в админке и ограничьте его только на фронтенде или на неважных экранах.
Поставили слишком большой интервал
Если интервал сделать чрезмерно большим, автосохранение станет менее полезным, а предупреждения о конфликте редактирования будут приходить с задержкой. Для большинства сайтов разумнее начинать с умеренного значения и тестировать поведение в реальной админке.
Смешали оптимизацию с кэшем и получили непредсказуемый результат
Некоторые плагины оптимизации и безопасности вмешиваются в admin-ajax.php. Если после изменения Heartbeat сайт ведет себя странно, проверьте, не блокирует ли другой плагин AJAX-запросы или не режет ли их серверный кэш.
Безопасность и производительность: что еще имеет смысл сделать
Если задача — разгрузить админку, не ограничивайтесь только Heartbeat. Часто рядом находятся тяжелые плагины, лишние виджеты в консоли и неиспользуемые модули. Для технической чистки сайта можно посмотреть в сторону Clearfy Pro: у него есть инструменты для отключения лишних функций и уменьшения мусора в WordPress. Ссылка на продукт: https://wpshop.ru/plugins/clearfy.
Но даже с плагином не стоит отключать все подряд. Сначала измерьте, что именно грузит сайт, затем убирайте только то, что не используется. Это особенно важно для админки: здесь одна неудачная оптимизация может стоить удобства работы редакторов и контент-менеджеров.
Если нужен короткий чек-лист перед внедрением, используйте такой порядок:
- проверить, где именно идет нагрузка;
- сначала увеличить интервал Heartbeat;
- потом отключать только на фронтенде;
- в админке трогать только неважные экраны;
- после каждого шага тестировать автосохранение и редактор.