L'API WordPress Heartbeat utilise admin-ajax.php pour exécuter les appels AJAX. Si l'utilisateur X laisse son navigateur ouvert, de nombreux appels seront effectués vers le serveur, chaque appel se produisant lorsqu'il y a un «battement». Maintenant, si l'utilisateur Y laisse son navigateur ouvert, de nombreux autres appels seront effectués vers le serveur, chacun de ces appels se produisant lorsqu'il y a un «battement». Il est possible qu'un grand site Web ait également l'utilisateur A, l'utilisateur B et l'utilisateur C faire la même chose.
Ma question:
Étant donné que de nombreux utilisateurs peuvent accéder simultanément à un site Web, les battements de l'API WordPress Heartbeat sont-ils échelonnés (le battement pour l'utilisateur X se produit quelques secondes avant le battement pour l'utilisateur Y) ou un battement se produit-il exactement de la même manière? temps pour tous les utilisateurs?
Si les «battements» ne sont pas échelonnés, ma préoccupation est une charge très lourde sur le serveur au moment où un «battement» se produit.
la source
Réponses:
Je pense que les battements sont décalés par nature, car la prochaine coche est déterminée par le temps du navigateur
time()
dans lascheduleNextTick()
méthode du/wp-includes/js/heartbeat.js
fichier:où il est utilisé pour planifier le prochain tick avec la
setTimeout
fonction:L'heure du navigateur est définie comme suit:
La
connect()
méthode contient l'appel ajax et utilisealways()
pour planifier le prochain tick.
Les intervalles de ticks disponibles sont 5s, 15s, 30s et 60s.
Pour un grand nombre d'utilisateurs très actifs, avec un intervalle de tick court, les battements peuvent sembler se produire simultanément.
Il est toujours bon d'avoir des données, vous pouvez donc enregistrer les ticks des utilisateurs connectés, avec le
heartbeat_tick
crochet:Voici un exemple tiré du
ticks.log
fichier:la source