API WordPress Heartbeat использует admin-ajax.php для выполнения вызовов AJAX. Если пользователь X оставит свой браузер открытым, на сервер будет сделано много звонков, причем каждый звонок происходит, когда происходит «удар». Теперь, если пользователь Y оставит свой браузер открытым, серверу будет сделано гораздо больше звонков, и каждый из этих звонков будет происходить, когда есть «удар». Вполне возможно, что на большом веб-сайте также будут присутствовать пользователь A, пользователь B и пользователь C.
Мой вопрос:
Учитывая, что многие пользователи могут одновременно получать доступ к веб-сайту, расположены ли «удары» API WordPress Heartbeat («удар» для пользователя X происходит за несколько секунд до «удара» для пользователя Y) или «удар» происходит точно так же время для всех пользователей?
Если «удары» не находятся в шахматном порядке, меня беспокоит очень большая нагрузка на сервер в тот момент, когда происходит «удары».
источник
Ответы:
Я бы подумал, что ритмы являются ступенчатыми по своей природе, потому что следующий тик определяется временем браузера
time()
вscheduleNextTick()
методе в/wp-includes/js/heartbeat.js
файле:где он используется для планирования следующего тика с помощью
setTimeout
функции:Время браузера определяется как:
connect()
Метод содержит вызов Ajax и используетalways()
запланировать следующий тик.
Доступны интервалы между тиками: 5, 15, 30 и 60 с.
Для большого количества очень активных пользователей с коротким интервалом между тактами может показаться, что биения происходят одновременно.
Всегда хорошо иметь некоторые данные, чтобы вы могли регистрировать тики от зарегистрированных пользователей, используя
heartbeat_tick
хук:Вот пример из
ticks.log
файла:источник