Die WordPress Heartbeat API verwendet admin-ajax.php, um AJAX-Aufrufe auszuführen. Wenn Benutzer X seinen Browser offen lässt, werden viele Anrufe an den Server getätigt, wobei jeder Anruf bei einem "Beat" erfolgt. Wenn Benutzer Y seinen Browser offen lässt, werden viel mehr Anrufe an den Server getätigt, wobei jeder dieser Anrufe bei einem "Beat" erfolgt. Es ist möglich, dass auf einer großen Website Benutzer A, Benutzer B und Benutzer C dasselbe tun.
Meine Frage:
Bedenkt man, dass viele Benutzer möglicherweise gleichzeitig auf eine Website zugreifen, werden die "Beats" der WordPress Heartbeat-API gestaffelt (der "Beat" für Benutzer X tritt einige Sekunden vor dem "Beat" für Benutzer Y auf) oder tritt ein "Beat" genau zur gleichen Zeit auf Zeit für alle Benutzer?
Wenn die Beats nicht gestaffelt sind, ist meine Sorge, dass der Server an dem Punkt, an dem ein Beat auftritt, sehr stark belastet wird.
quelle
Antworten:
Ich würde denken, dass die Beats von Natur aus gestaffelt sind , da der nächste Tick durch die Browserzeit
time()
innerhalb derscheduleNextTick()
Methode in der/wp-includes/js/heartbeat.js
Datei bestimmt wird:wo es verwendet wird, um den nächsten Tick mit der
setTimeout
Funktion zu planen :Die Browserzeit ist definiert als:
Die
connect()
Methode enthält den Ajax-Aufruf und verwendetalways()
um den nächsten Tick zu planen.
Die verfügbaren Tick-Intervalle sind 5s, 15s, 30s und 60s.
Bei einer großen Anzahl sehr aktiver Benutzer mit einem kurzen Tick-Intervall scheinen die Beats möglicherweise gleichzeitig zu erfolgen.
Es ist immer gut, einige Daten zu haben, damit Sie die Ticks der angemeldeten Benutzer mit dem
heartbeat_tick
Haken protokollieren können :Hier ist ein Beispiel aus der
ticks.log
Datei:quelle