Utilisation de setInterval () pour effectuer un sondage continu simpliste
Pour un simple webapp qui doit actualiser les parties de données présentées à l'utilisateur dans les intervalles de l'ensemble, y at-il des inconvénients à juste en utilisant la fonction setInterval() pour obtenir un JSON à partir d'un ordinateur d'extrémité, au lieu d'utiliser un bon d'interrogation cadre?
Pour le bien de l'exemple, disons que je suis statut de l'actualisation d'un travail de traitement toutes les 5 secondes.
source d'informationauteur Sologoub
Vous devez vous connecter pour publier un commentaire.
De mon commentaire:
Je voudrais utiliser
setTimeout
[docs] et toujours de l'appeler quand le précédent a pas reçu de réponse. De cette façon, vous éviter la congestion ou de la fonction d'empilage ou ce que vous voulez l'appeler, dans le cas d'une demande/réponse prend plus de temps que votre intervalle.Donc quelque chose comme ceci:
Un simple non-bloquant sondage fonction peut être mis en œuvre dans les navigateurs récents en utilisant des Promesses:
Vous pouvez le faire comme ceci:
Je sais que c'est une vieille question, mais je suis tombé sur elle, et dans le StackOverflow façon de faire les choses que j'ai pensé que je pourrais l'améliorer. Vous pourriez envisager une solution similaire à ce qui est décrit ici qui est connu comme le long du scrutin. OU une autre solution est WebSockets (l'une des meilleures implémentations des websockets avec l'objectif principal de travailler sur tous les navigateurs) socket.io.
La première solution est essentiellement résumée comme vous envoie une requête AJAX et d'attendre une réponse avant d'envoyer une autre, puis une fois la réponse a été livré, la file d'attente jusqu'à la prochaine requête.
Pendant ce temps, sur le backend, vous n'avez pas de retour une réponse jusqu'à ce que les changements d'état. Donc, dans votre scénario, vous devez utiliser une boucle while qui continuera jusqu'à ce que le changement de statut, puis retourner le changement de statut de la page. J'aime vraiment cette solution. Comme la réponse ci-dessus l'indique, c'est ce que facebook fait (ou au moins l'a fait dans le passé).
socket.io est fondamentalement le jQuery de Websockets, de sorte que quel que soit le navigateur de vos utilisateurs, vous pouvez établir une connexion de socket qui peut pousser les données de la page (sans interrogation à tous). Ce qui est plus proche d'un Blackberry notifications instantanées, qui - si vous allez pour l'instant, c'est la meilleure solution.