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 ?
Réponses
Trop de publicités?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:
- De cadencement et de Synchronisation en JavaScript - écrit par Opera developer
- Comment Javascript Minuteries de Travail - écrit par John Resig
- Les événements et le moment dans la Profondeur
- W3 spec: HTML5 boucle d'événement
- MDN article sur la Boucle d'Événement
- Présentation sur JS file d'attente d'événements
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:
- Javascript s'exécute dans un thread unique pour chaque onglet du navigateur ou de la fenêtre.
- Les événements sont mis en file d'attente et exécutées de façon séquentielle.
- 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.