wpnews.ru wordpress wpnews.ru

Как отключить Heartbeat API в WordPress и снизить нагрузку в админке

Heartbeat API в WordPress часто всплывает не как «фича», а как источник лишних AJAX-запросов в админке и на экране редактирования записей. На небольшом сайте это обычно незаметно, но на проектах с несколькими редакторами, длинными сессиями в редакторе и тяжелыми плагинами автосохранения он начинает заметно шуметь в логах и создавать лишнюю нагрузку на PHP и базу.

Полностью отключать Heartbeat вслепую не стоит: он нужен для автосохранения, уведомлений о блокировках записей и части поведения в админке. Гораздо полезнее понять, где именно он мешает, и ограничить его там, где он не нужен.

Когда Heartbeat API действительно проблема

Сначала проверьте, что именно вы хотите исправить. Если жалоба звучит как «админка тормозит», это еще не повод отключать API целиком. Обычно проблема проявляется в одном из сценариев:

  • в /wp-admin/ постоянно идут запросы admin-ajax.php с интервалом 15–60 секунд;
  • на странице редактирования записи CPU у PHP-FPM подскакивает без видимой причины;
  • в логах много повторяющихся запросов от одного и того же пользователя;
  • редактор Gutenberg или классический редактор начинает подлагивать при нескольких открытых вкладках;
  • на слабом хостинге админка становится заметно медленнее именно при активной работе редакторов.

Что проверить до изменений

Откройте DevTools в браузере и посмотрите вкладку Network. Фильтр по admin-ajax.php быстро покажет, как часто идут запросы. Если запросы появляются только в админке и только во время редактирования, это нормальное поведение. Если они идут слишком часто или даже там, где не нужны, можно ограничивать Heartbeat точечно.

Еще полезно посмотреть, не добавляет ли нагрузку сторонний плагин. Иногда виноват не сам Heartbeat, а код, который цепляется к его событиям и делает тяжелые запросы к базе или внешним API.

Как отключить Heartbeat API точечно, а не ломать админку

Самый безопасный вариант — не выключать Heartbeat полностью, а изменить его поведение в нужных местах. Для этого есть фильтр heartbeat_settings и действие init для админки. Ниже — рабочий пример, который снижает частоту запросов в редакторе и отключает Heartbeat на фронтенде, где он обычно не нужен.

<?php
/**
 * Снижаем частоту Heartbeat в админке и отключаем на фронтенде.
 */
add_filter( 'heartbeat_settings', function( $settings ) {
    if ( is_admin() ) {
        // Было 15 секунд по умолчанию, ставим 60.
        $settings['interval'] = 60;
    }

    return $settings;
} );

add_action( 'init', function() {
    if ( ! is_admin() ) {
        wp_deregister_script( 'heartbeat' );
    }
} );

Этот вариант подходит, если вам нужно убрать лишнюю активность на публичной части сайта и уменьшить частоту запросов в админке. Но у него есть компромисс: на фронтенде вы отключаете не только «шум», но и возможные функции, которые завязаны на Heartbeat через плагины.

Если нужен более жесткий вариант

Иногда Heartbeat мешает только на конкретных экранах, например в редакторе записей. Тогда лучше ограничить его именно там. Для этого можно использовать фильтр heartbeat_send или отключать скрипт только в нужных админ-экранах через admin_enqueue_scripts. Ниже пример, который не грузит Heartbeat на экранах списка записей и страниц, но оставляет его в редакторе.

<?php
add_action( 'admin_enqueue_scripts', function( $hook ) {
    // Оставляем Heartbeat в редакторе, но убираем на списках.
    if ( in_array( $hook, array( 'edit.php', 'upload.php' ), true ) ) {
        wp_deregister_script( 'heartbeat' );
    }
} );

Такой подход удобен, если редакторы жалуются именно на список записей или медиа-библиотеку, а не на сам процесс редактирования.

Сравнение подходов: плагин, код или ничего не трогать

ПодходКогда подходитМинусы
Ничего не менятьСайт небольшой, жалоб на нагрузку нетЛишние запросы остаются
Код в теме или mu-pluginНужно точечно ограничить Heartbeat без лишних зависимостейТребует аккуратной проверки на каждом экране
Плагин оптимизацииНужен интерфейс для неразработчикаМожет отключить больше, чем нужно

Если вы уже используете плагин для технической чистки сайта, проверьте, есть ли в нем настройка Heartbeat. Например, в Clearfy Pro это часто решается через интерфейс без ручного кода, но даже в этом случае важно понимать, что именно отключается и где.

Пошаговая диагностика перед внедрением

  1. Откройте админку и зафиксируйте, где именно заметна проблема: редактор, список записей, медиа-библиотека или весь backend.
  2. Посмотрите Network в браузере и найдите повторяющиеся запросы к admin-ajax.php.
  3. Проверьте, не связано ли это с конкретным плагином автосохранения, совместной работы или уведомлений.
  4. Сделайте бэкап или внесите изменение через mu-plugin, а не прямо в functions.php активной темы.
  5. После изменения сравните частоту запросов и поведение редактора.

Как проверить, что решение сработало

Проверка должна быть не на глаз, а по факту. Откройте страницу, где раньше были лишние запросы, и убедитесь в трех вещах:

  • в Network стало меньше повторяющихся запросов к admin-ajax.php;
  • редактор не потерял автосохранение и не начал выдавать ошибки блокировки записи;
  • в логах сервера снизилось число однотипных обращений из админки.

Если вы отключали Heartbeat на фронтенде, проверьте публичные страницы в режиме инкогнито и убедитесь, что ничего не сломалось в плагинах, которые могли использовать этот механизм косвенно. Особенно это важно для сайтов с кастомной авторизацией, личными кабинетами и плагинами совместного редактирования.

Частые ошибки и как их исправить

Полное отключение без проверки плагинов

Самая частая ошибка — сразу вырезать Heartbeat везде. В результате автосохранение может работать нестабильно, а плагины, которые рассчитывают на периодические запросы, начинают вести себя странно. Если нужна экономия ресурсов, сначала снижайте частоту, а не отключайте механизм полностью.

Правка functions.php активной темы

Это неудобно и рискованно: при обновлении темы код потеряется. Для таких правок лучше использовать mu-plugin или отдельный мини-плагин. Тогда настройка переживет обновления и будет проще отключаться при отладке.

Отключение в админке без теста редактора

Иногда админка кажется «лишней», но именно в редакторе Heartbeat нужен чаще всего. Если убрать его наугад, можно получить проблемы с блокировкой записей и конфликтами при одновременной работе нескольких пользователей.

Слишком агрессивное увеличение интервала

Ставить интервал 120–300 секунд без проверки — плохая идея. Да, запросов станет меньше, но вырастет риск устаревших уведомлений и конфликтов при редактировании. Для большинства сайтов разумнее начинать с 60 секунд и смотреть на поведение.

Практические советы по безопасности и производительности

Если Heartbeat был заметной частью нагрузки, не ограничивайтесь одной настройкой. Проверьте еще несколько вещей:

  • уберите тяжелые плагины, которые делают запросы на каждом heartbeat-событии;
  • проверьте, нет ли в админке лишних виджетов и метабоксов, которые постоянно обновляются;
  • смотрите на PHP error log: иногда проблема не в частоте запросов, а в ошибках внутри callback-обработчиков;
  • не отключайте механизм наугад на мультисайте без теста на всех ролях;
  • если сайт под нагрузкой, измеряйте изменения до и после через логи веб-сервера, а не только по ощущениям.

Для сайтов, где важно убрать технический шум и дубли, иногда удобнее сочетать точечную настройку Heartbeat с общей чисткой WordPress. Но и здесь лучше идти от диагностики: сначала понять, что именно создает нагрузку, потом уже резать лишнее.

Если нужен более широкий набор технических оптимизаций, имеет смысл смотреть на решения, которые умеют управлять дублями, служебными скриптами и базовой чисткой админки. В таких задачах полезны не «магические ускорители», а инструменты с понятными переключателями и предсказуемым эффектом.

×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙