Использование WordPress Heartbeat API

  • 20.06.15
  • 09:05
  • 1743
  • 0

Автор: Pippin Williamson.
Оригинал: Using the WordPress Heartbeat API.

Замечание: перевод вольный, некоторые высказывания заменены на более понятные (на мой взгляд), и добавлены примечания. Все примечания опираются на WP 4.2.2.

— Г.К.

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

Что такое Heartbeat API?

Heartbeat API очень точно назван (heartbeat — сердцебиение). Его можно сравнить с сердцем: точно как человеческое сердце, бьющееся и вызывающее пульсацию в сосудах, Heartbeat API издаёт «пульсации» (технически называемые «тиками» — tick), которые затем улавливаются и обрабатываются с целью периодического выполнения каких-либо действий.

Одной из положительных сторон Heartbeat API является то, что он почти полностью реализован на JavaScript — это позволяет действовать не только на стороне сервера, но и на просматриваемой пользователем странице. Например, используя Heartbeat API можно синхронизировать информацию, отображённую браузером, со значениями в базе данных, иногда меняющимися. Реализация подобных вещей состоит из двух частей:

  1. обработки события «send» — начала пульса — при которой отправляемая серверу информация снабжается к.-л. данными (возможно, прежде полученными из БД);
  2. обработки события «tick» — для получения данных и модификации отображаемой страницы (и/или других действий) силами JavaScript.

В качестве реального работающего примера можно привести плагин Easy Digital Downloads, где мы в реальном времени обновляем виджет админской консоли, отображающий информацию по продажам. После каждой новой сделки информация в БД меняется, а отображаемая в виджете статистика автоматически обновляется через некоторое время.

Примечание: интервал обновления варьируется от 15 до 120 сек., по умолчанию — 60.

Процесс обновления статистики выглядит примерно так:

  1. обработчик события 'heartbeat-send', возникающего при отправке «пульса», добавляет в отправляемые данные определённый ключ, заставляющий сервер включить в ответ информацию по продажам;
  2. обработчик события 'heartbeat-tick', происходящего при получении от сервера ответного «пульса», разбирает полученные данные и, если запрошенная в п.1 информация имеется, переходит к п.3;
  3. новые значения извлекаются из пришедших данных и вносятся в содержимое виджета статистики, включается индикация изменений.
  4. Взглянем на реализующий эти пункты код.

    Во-первых, мы должны подключить JS-скрипт с Heartbeat API:

    Функция выдачи нашего скрипта, использующего Heartbeat API, повешена на хук 'admin_print_footer_scripts' — скрипт будет выведен в футере консоли администрирования. Происходит это следующим образом:

    Почти вся «магия» происходит здесь. В строках 13-16 мы добавляем ключ 'edd_heartbeat' и устанавливаем его значение в 'dashboard_summary', определяя тем самым данные, которые требуются нам от сервера (код формирования ответа сервера — чуть ниже).

    Обработчик ответа сервера (тика) находится в строках 18-39. С каждым тиком приходит массив данных, в котором мы отыскиваем нужную нам информацию. В этом случае data['edd-payment-count'] просто содержит целое, являющееся общим количеством продаж в системе. Мы можем взять это целое и внести изменения в текст виджета. Для удобства добавлена смена стилей, заставляющая количество продаж «пульсировать» при каждом обновлении.

    Заметьте, что первым делом проверяется ключ edd_heartbeat, а данные дополняются при его значении 'dashboard_summary'. Это обеспечивает отправку данных только при необходимости.

    Внутри блока условия мы просто запрашиваем количество платежей, сделанных в магазине, и отправляем браузеру как часть ответа. Это те самые данные, с которыми работает приведённый выше JS-скрипт.

    Вот и всё: это и есть WordPress Heartbeat API.

    Пример плагина с тестом можно скачать здесь.

    Примечание: чтобы посмотреть на работу плагина с тестом, следует прежде установить и активировать плагин Easy Digital Downloads (легко отыскивается по имени штатным установщиком плагинов /wp-admin/plugin-install.php).

    Ещё примечание: по умолчанию обновление происходит раз в минуту, поэтому ждать двухсекундного изменения жирности нулей продаж обременительно долго. Чтобы установить интервал в минимум — 15 секунд — следует добавить в тестовый плагин такой код:

Оставить комментарий

Добавить комментарий