Возможности WordPress Heartbeat API
API WordPress Heartbeat обеспечивает три ключевые функции, которые делают администрирование веб-сайта проще и удобнее. К этим функциям относятся автосохранение, блокировка контента и уведомления на панели управления в реальном времени. Они особенно важны для веб-сайтов, имеющих нескольких авторов, которые создают или редактируют контент одновременно.
1. Автосохранения и ревизии
Автосохранения и ревизии — одна из ключевых функций WordPress Heartbeat API. Всякий раз, когда пользователь работает в блочном или в классическом редакторе, WordPress выполняет автосохранение контента каждые 60 секунд. Это гарантирует, что вы можете вернуться к автосохранению, если случайно закрыли вкладку браузера или у вас выключили свет / села зарядка планшета. Отправляя запросы на сервер каждую минуту, WordPress Heartbeat API сохраняет рабочую копию записи или страницы в своей базе данных, которая будет храниться там до тех пор, пока не запустится новое автосохранение.
Автосохранения WordPress на базе Heartbeat API чрезвычайно полезны. Они могут предотвратить потерю данных в случае сбоя браузера или проблем с подключением. Автосохранения не заменяют ревизии, созданные пользователем, и не накапливаются в базе данных.
2. Блокировка контента
Блокировка контента — еще одна функция WordPress Heartbeat API, позволяющая обеспечить более удобные возможности редактирования для владельцев веб-сайтов WordPress. Если сообщение или страница в данный момент редактируются, WordPress заблокирует их, чтобы другие пользователи не могли вносить в них изменения. WordPress Heartbeat API будет отправлять запросы на сервер каждые 15 секунд. Он покажет уведомление, если другой пользователь откроет заблокированный контент для редактирования.
3. Уведомления на панели мониторинга в реальном времени.
API WordPress Heartbeat обеспечивает уведомления панели управления в режиме реального времени, в том числе отправляемые плагинами. Надежность связи клиент-сервер, которую обеспечивает Heartbeat API, побудила тысячи разработчиков плагинов WordPress интегрировать его в свои приложения.
Интервал по умолчанию для вызовов WordPress Heartbeat API в админке сайта составляет 15 секунд. Разработчики плагинов, желающие использовать функциональные возможности API, могут настроить собственные интервалы обмена данными между клиентским приложением и сервером.
Как работает API Heartbeat WordPress?
WordPress Heartbeat API использует технологию AJAX для связи с сервером из панели администратора. Обработчик admin-ajax.php получает данные и обрабатывает их на стороне сервера, впоследствии подготавливая и возвращая ответ в формате JSON.
Когда панель управления WordPress загружается, код на стороне клиента устанавливает интервал, также известный как тик, который будет запускаться каждые 15–120 секунд, в зависимости от задачи. Коду API Heartbeat поручено собирать данные на стороне клиента и передавать их на сервер для получения обновлений.
Общее количество вызовов Heartbeat API зависит от количества активных пользователей, одновременно работающих на сайте. Это соответствует количеству загруженных экземпляров панели управления WordPress. Открытие административной области WordPress в нескольких окнах браузера создает такое же количество вызовов Heartbeat API, как если бы несколько пользователей вошли в серверную часть веб-сайта и одновременно выполняли задачи.
Зачем ограничивать вызовы API WordPress Heartbeat?
Если у вас сайт на WordPress, который публикует, например, новости и имеет несколько авторов, причем из админки, а не просто перенося текст из Word, например. Это может привести к тому, что нагрузка на сервер может очень сильно повыситься, именно за счет большого количества запросов на admin-ajax.php. Это можно отследить с помощью логов сервера. Там можно даже увидеть, что примерно 50-60% нагрузки создается этими запросами, что связано с тем, что авторы оставляют админку открытой, когда уходят на перерыв, в то время как движок WordPress каждые 15 секунд посылает запросы к admin-ajax.php. На таких хостингах, как хостинг Украина, например, это приводит к тому, что вы получаете письмо с просьбой решить проблему или перейти на более дорогой тариф.
Ограничение вызовов WordPress Heartbeat API может помочь ускорить работу сайтов WordPress, которым выделен очень ограниченный пул серверных ресурсов, особенно когда речь идет о процессорном времени. Хотя Heartbeat API вряд ли является ключевой проблемой низкой производительности веб-сайта, его определенно следует принять во внимание.
Каждый раз, когда API Heartbeat взаимодействует с сервером, к файлу admin-ajax.php в wp-admin отправляется HTTP-запрос POST. Поскольку вызовы Heartbeat API отправляются на сервер каждые 15–120 секунд, и их число увеличивается, если имеется более одного активного пользователя-администратора, API может перегружать сервер, что приводит к высокой загрузке ЦП и системной памяти.
Некоторые владельцы веб-сайтов WordPress могут даже принять активность Heartbeat API за продолжающуюся DDOS-атаку. Запросы WordPress Heartbeat API не могут быть кэшированы, поэтому каждый вызов будет использовать определенное количество ресурсов сервера. Если сервер активно использует свои ресурсы для обработки вызовов API, ваши клиенты могут столкнуться с задержками в рендеринге контента при просмотре вашего веб-сайта.
Установление нового интервала для WordPress Heartbeat API
Для установления нового интервала вы можете использовать код ниже. Его можно разместить в файле functions.php вашей темы или создать для этого отдельный плагин. Для $settings['interval']
значение может быть задано от 15 до 120 секунд максимально. Вы указываете только цифру.
1 2 3 4 5 6 7 8 |
function mytheme_wp_heartbeat_settings( $settings ) { // Время от 15 до 120 // Максимальное время кода Javascript составляет 120 секунд, что является верхним пределом $settings['interval'] = 120; return $settings; } add_filter( 'heartbeat_settings', 'mytheme_wp_heartbeat_settings' ); |
Фильтр можно найти здесь, как и код вышеприведенной функции.
Вместо этого вы можете установить минимальный интервал до 600, что переопределит настройку $settings['interval']
, причем с бОльшим интервалом в секундах. В файле wp-includes/js/heartbeat.js документации WordPress объясняется настройка $settings['minimalInterval']
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* * Used to limit the number of AJAX requests. Overrides all other intervals * if they are shorter. Needed for some hosts that cannot handle frequent requests * and the user may exceed the allocated server CPU time, etc. The minimal interval * can be up to 600 seconds, however setting it to longer than 120 seconds * will limit or disable some of the functionality (like post locks). * Once set at initialization, minimalInterval cannot be changed/overridden. */ /* перевод * Используется для ограничения количества запросов AJAX. Переопределяет все остальные интервалы, если * они короче. Требуется для некоторых хостов, которые не могут обрабатывать частые запросы. * и пользователь может превысить выделенное процессорное время сервера и т. д. Минимальный * интервал может составлять до 600 сек. однако установление его на время более 120 секунд. * ограничит или отключит некоторые функции (например, блокировку сообщений). После установки * при инициализации минимальный интервал не может быть изменен/переопределен. */ function mytheme_wp_heartbeat_settings_min( $settings ) { $settings['minimalInterval'] = 240; return $settings; } add_filter( 'heartbeat_settings', 'mytheme_wp_heartbeat_settings_min' ); |
Строка $settings['minimalInterval'] = 240;
позволяет задать цифру в секундах в виде временного промежутка, через который будет повторен вызов admin-ajax.php. Вы можете задать здесь цифру в виде 15-600 в зависимости от потребностей вашего сайта в автосохранениях или блокировке какого-либо контента для авторов.
Вы можете проверить, как работает ваш измененный интервал, открыв Инструменты разработчика (F12
или CTRL + Shift + I
), перейдя на вкладку Сеть (Network), выбрав запросы типа Fetch/XHR. Сделать это нужно, конечно же, в админке WordPress для записи или страницы, например.
Скорей всего вам нужно будет еще раз перезагрузить страницу и подождать то время, которое вы указали для интервала, т.е. 4 минуты или больше для $settings['minimalInterval'] = 240;
. После этого вы увидите запрос к admin-ajax.php. Кликните на этом названии и посмотрите вкладку Payload (Полезная нагрузка). Именно там будет виден action: heartbeat
и interval: 240
.
Отключение Heartbeat API
Поскольку Heartbeat API может требовать достаточно высокой производительности от сервера, вы также можете совсем отключить его. Но тогда все вышеперечисленный возможности также станут недоступны. Поэтому нужно сразу задуматься о целесообразности этого действия.
Для отключения Heartbeat API нужно добавить такой код в файл functions.php вашей темы:
1 2 3 4 |
function mytheme_disable_the_heartbeat_api() { wp_deregister_script( 'heartbeat' ); } add_action( 'init', 'mytheme_disable_the_heartbeat_api', 1 ); |
По сути этим кодом вы просто удаляете определенный скрипт, который действует в системе WordPress.
Управляем автосохранениями
Вы также можете запретить автосохранения, но в этом случае при случайном закрытии вкладки с несохраненной информацией восстановить ее вы уже не сможете. Это имеет смысл делать, если статьи на сайт вы пишите не в админке.
Код простой, добавляете его также в functions.php:
1 2 3 4 |
function disable_autosave() { wp_deregister_script('autosave'); } add_action('admin_init', 'disable_autosave'); |
Также для автосохранений можно установить другой интервал. Для этого в конфигурационном файле WordPress wp-config.php (находится в корневом каталоге вашего сайта) нужно добавить строку с константой AUTOSAVE_INTERVAL:
1 |
define('AUTOSAVE_INTERVAL', 300); |
Вы можете присвоить интервалу большее значение, например, 3600, что равно часу, чтобы полностью отключить автосохранение WordPress. Константы WordPress, настроенные в wp-config.php, не изменяются ни при каких обновлениях WordPress. Вам не придется переопределять их позже.
Использование плагина Heartbeat Control
Если вы не хотите использовать код, то заменой ему будет использование плагина Heartbeat Control от WP Rocket. Он позволяет делать все то же самое, но с визуальной настройкой и вне зависимости от темы.
В настройках плагина вы можете включить, отключить или изменить Heartbeat в меню Настройки (Settings > Heartbeat Control) для админки, фронтенда или редактора постов:
Изменение интервала также доступно в настройках:
Заключение
WordPress Heartbeat API — это функция, обеспечивающая автосохранение, блокировку контента, редактируемого другим автором(-ами), и уведомления от плагинов между браузером и веб-сервером. К сожалению, эти процессы могут создавать чрезмерное количество запросов POST, что иногда значительно увеличивает загрузку ЦП сервера вашего хостинга. В этом случае будет необходимо управление этим API: либо ограничение частоты отправки этих запросов, либо полное его отключение, если это не вредит функциональности вашего WordPress-сайта.