146 votes

Comment JavaScript gère-t-il les réponses AJAX en arrière-plan ?

Depuis JavaScript s’exécute dans un thread unique, après avoir effectué une requête AJAX, ce qui se passe réellement dans le fond ? JavaScript est en quelque sorte d’interrogation pour une réponse AJAX ? Et comment le faire que si c’est le seul thread ? , Il passe en arrière ? Je sais que la `` des changements, mais je voudrais obtenir une compréhension plus profonde dans cette, si quelqu'un peut nous éclairer ?

228voto

jfriend00 Points 152127

Ci-dessous les couvertures, javascript a une file d'attente d'événements. Chaque fois qu'un javascript thread d'exécution des finitions, il vérifie si il y a un autre événement dans la file d'attente de processus. Si il y est, il la tire de la file d'attente et les déclencheurs d'événement (comme un clic de souris, par exemple).

Le code natif de réseau qui se trouve sous l'appel ajax permettra de savoir quand la réponse ajax est fait et un événement sera ajouté à le javascript file d'attente des événements. Comment le code natif sait quand l'appel ajax est fait dépend de la mise en œuvre. Il peut être mis en œuvre avec des fils ou il peut également être basé sur l'événement lui-même (il n'a pas vraiment d'importance). Le point de la mise en œuvre est que lorsque la réponse ajax est fait, du code natif saurez que c'est fait et organiser un événement dans le JS de la file d'attente.

Si pas de Javascript est en cours d'exécution à la fois, l'événement sera immédiatement déclenché, ce qui va exécuter l'ajax réponse de gestionnaire. Si quelque chose est en cours d'exécution à l'époque, puis le tournoi sera traitée que lorsque le courant javascript exécution du thread se termine. Il n'a pas besoin d'être l'un des bureaux de par le moteur javascript.

Parce que tous les événements extérieurs passer par la file d'attente d'événements et aucun événement n'est jamais déclenchée alors que le javascript s'exécute réellement quelque chose d'autre, il reste en mono-thread.

Voici quelques articles sur les détails:

16voto

qwertzguy Points 1021

Vous pouvez trouver ici un très complète de la documentation sur le traitement d'événements en javascript.
Il est écrit par un mec de travail sur le javascript de la mise en œuvre dans le Navigateur Opera.

Plus précisément, regardez les titres: "l'Événement de Flux", "Événement" file d'attente" et "Non-Événements de l'utilisateur": vous apprendrez que:

  1. Javascript s'exécute dans un thread unique pour chaque onglet du navigateur ou de la fenêtre.
  2. Les événements sont mis en file d'attente et exécutées de façon séquentielle.
  3. XMLHttpRequest sont gérées par la mise en œuvre et les rappels sont exécutés à l'aide de la file d'attente des événements.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X