Если в админке WordPress сайт начинает подтормаживать, а в логах или мониторинге видно частые запросы к admin-ajax.php, виновником нередко оказывается Heartbeat API. Это встроенный механизм WordPress, который регулярно отправляет AJAX-запросы, чтобы обновлять данные в реальном времени: автосохранение, уведомления, блокировку записи при одновременном редактировании и некоторые события в редакторе. На обычном сайте он полезен, но на слабом хостинге или при большом количестве открытых вкладок может создавать лишнюю нагрузку.
Полностью отключать Heartbeat API стоит не всегда. Чаще правильнее ограничить его работу там, где он действительно мешает: в админке, на экране редактирования или на фронтенде. Ниже — практичные способы сделать это без лишнего риска.
Когда Heartbeat API действительно мешает
Сам по себе Heartbeat не «ломает» сайт, но он регулярно обращается к серверу, даже если пользователь ничего не делает. Обычно это заметно в таких ситуациях:
- в админке открыто несколько вкладок с редактором записей;
- на сайте много авторов, которые одновременно работают в панели управления;
- хостинг слабый, а PHP-процессы и так загружены;
- в мониторинге видно много запросов к
wp-admin/admin-ajax.php; - редактор или панель управления начинают подлагивать без явной причины.
При этом важно понимать: если отключить Heartbeat полностью, можно потерять автосохранение, предупреждения о занятой записи и часть удобств в редакторе. Поэтому сначала имеет смысл ограничить частоту запросов, а не рубить механизм целиком.
Самый безопасный вариант: снизить частоту запросов
WordPress позволяет менять интервал Heartbeat через фильтр heartbeat_settings. Это хороший компромисс: механизм остаётся работать, но обращается к серверу реже. Такой подход особенно полезен, если проблема не в самой функции, а в слишком частых запросах.
Добавьте код в functions.php дочерней темы или, что надёжнее, в небольшой mu-plugin. Если вы не уверены, где именно править код, лучше использовать дочернюю тему или отдельный мини-плагин, чтобы не потерять изменения после обновления темы.
add_filter( 'heartbeat_settings', function( $settings ) {
$settings['interval'] = 60; // секунды
return $settings;
} );
Значение 60 означает, что запросы будут отправляться раз в минуту вместо более частых обращений. Это не отключение, а именно снижение нагрузки. Если сайт всё ещё реагирует медленно, можно попробовать увеличить интервал, но слишком большие значения уже ухудшают работу автосохранения и уведомлений.
Как отключить Heartbeat только в админке
Если нагрузку создаёт именно панель управления, а на фронтенде всё работает нормально, можно отключить Heartbeat в админке. Для этого используется фильтр heartbeat_send, который позволяет запретить отправку запросов в нужной области.
Перед изменением сделайте резервную копию файла, куда будете вносить код. Если ошибиться в PHP-коде, можно получить белый экран в админке или на всём сайте.
add_filter( 'heartbeat_send', function( $send, $screen_id ) {
if ( is_admin() ) {
return false;
}
return $send;
}, 10, 2 );
На практике такой вариант используют, когда админка нужна только для редких правок, а автосохранение и уведомления не критичны. Но у этого решения есть побочные эффекты: в редакторе перестанут работать некоторые функции, завязанные на Heartbeat. Поэтому если вы активно редактируете записи, лучше не отключать его полностью, а только уменьшить частоту.
Отключение Heartbeat на фронтенде
На публичной части сайта Heartbeat обычно не нужен. Если тема или плагины не используют его на фронтенде, запросы можно отключить именно там. Это особенно полезно для сайтов, где авторизованные пользователи редко работают с контентом с публичной стороны, а лишние AJAX-запросы только расходуют ресурсы.
Надёжный способ — отключить скрипт Heartbeat на фронтенде через wp_deregister_script. Делать это стоит только если вы понимаете, что на публичной части сайта нет функций, которые зависят от этого механизма.
add_action( 'wp_enqueue_scripts', function() {
if ( ! is_admin() ) {
wp_deregister_script( 'heartbeat' );
}
}, 100 );
Этот вариант не затрагивает админку, но убирает лишние запросы на фронтенде. Если после этого на сайте появляются странности в формах, личном кабинете или редакторе на публичной стороне, значит, какой-то плагин рассчитывал на Heartbeat, и отключение нужно откатить.
Что выбрать: отключение или ограничение
Для большинства сайтов лучше идти по нарастающей: сначала увеличить интервал, потом отключать только в админке или только на фронтенде. Полное отключение имеет смысл, если сайт простой, редактирование контента происходит редко и вы точно не используете функции, завязанные на Heartbeat.
| Вариант | Что делает | Когда подходит |
|---|---|---|
| Увеличить интервал | Снижает частоту AJAX-запросов | Если нужна экономия ресурсов без потери функций |
| Отключить в админке | Убирает запросы из панели управления | Если админка тормозит, а автосохранение не критично |
| Отключить на фронтенде | Убирает лишние запросы с публичной части | Если Heartbeat там не используется |
| Отключить полностью | Механизм не работает нигде | Если сайт простой и вы понимаете последствия |
Как проверить, что нагрузка действительно снизилась
После изменений не стоит ориентироваться только на ощущение, что сайт стал быстрее. Лучше проверить это по факту.
- Откройте инструменты разработчика в браузере и посмотрите сетевые запросы: частота обращений к
admin-ajax.phpдолжна уменьшиться или исчезнуть. - Перезагрузите админку и оставьте вкладку открытой на несколько минут — число AJAX-запросов должно быть заметно ниже.
- Если есть доступ к логам или панели хостинга, сравните количество обращений до и после изменения.
- Проверьте редактор записи: автосохранение и предупреждения о конфликте пользователей должны работать только если вы не отключали Heartbeat полностью.
Если после отключения в админке вы заметили проблемы с сохранением или редактированием, верните Heartbeat хотя бы в редакторе и ограничьтесь увеличением интервала. Это обычно безопаснее, чем полное отключение.
Когда лучше не отключать Heartbeat
Есть сценарии, где экономия нагрузки не стоит потери удобства. Не отключайте Heartbeat полностью, если:
- несколько человек одновременно редактируют записи;
- вам важны автосохранение и предупреждения о конфликте редактирования;
- на сайте используются плагины, которые явно завязаны на частые AJAX-обновления;
- вы часто работаете в редакторе и не хотите терять часть встроенных функций WordPress.
В таких случаях разумнее ограничить частоту запросов или отключить механизм только там, где он не нужен. Это даёт заметный выигрыш по нагрузке без лишних побочных эффектов.
Если нужен быстрый и безопасный старт, начните с увеличения интервала Heartbeat до 60 секунд. Если этого мало, отключайте его точечно: в админке или на фронтенде, но не везде сразу. Такой подход обычно решает проблему лишней нагрузки и не ломает привычную работу WordPress.