2011-03-24 1 views
18

J'ai fait de la programmation d'applications Web en utilisant GWT et j'ai été perturbé par le terme «boucle d'événement du navigateur».Qu'est-ce qu'une boucle d'événement de navigateur?

J'ai rencontré des situations où j'ai besoin d'exécuter des commandes différées et de "faire quelque chose" après la fin de la boucle d'événement du navigateur.

Je voudrais savoir ce que c'est exactement et ce qui se passe pendant le processus de boucle d'événement et dans quel ordre?

+2

Similaire: http://stackoverflow.com/questions/5131086/using-the-gwt-scheduler –

Répondre

18

Une boucle d'événement de navigateur est un fil démarré par le navigateur qui recherche et exécute constamment différents événements, comme il semble. Lorsque les événements se produisent, ils sont placés dans la file d'attente des événements et exécutés à tour de rôle par le thread d'événement. Votre javascript ne devrait pas créer ses propres boucles en attendant qu'il se termine ou quelque chose comme ça ... il bloquera ce thread de boucle d'événement continu. Au lieu de cela, vous utiliseriez quelque chose comme setTimeout ou setInterval et vérifiez les conditions que vous attendez pour que le navigateur puisse fonctionner pendant qu'il «attend». GWT est sympa en ce qu'il peut co-opter ce processus quelque peu en utilisant le scheduler - dans le cas où vous voulez exécuter quelque chose après que la boucle d'événement 'se termine', vous voudrez probablement utiliser scheduleFinally ou scheduleDeferred. Il va injecter un gestionnaire pour un morceau de code dans la file d'attente afin qu'il s'exécute après tout autre code dans le contexte d'exécution actuel (contexte d'exécution actuel == où que vous soyez dans la hiérarchie d'objets JavaScript courante avec la fenêtre comme racine objet) est exécuté mais avant l'événement suivant qui est placé dans la file d'attente.

+1

Aussi, est la pièce jointe de nos widgets et éléments d'interface utilisateur au DOM le dernier événement de la boucle, après quoi le navigateur boucle d'événement terminée? – gofeddy

+1

Les événements de manipulation DOM sont traités exactement de la même manière que les autres événements. Ils ne sont pas nécessairement le premier ou le dernier événement à tirer, peu importe où ils se trouvent dans la file d'attente. Ils font également exploser l'arborescence DOM afin que vous puissiez avoir des écouteurs pour ces événements n'importe où dans l'arborescence 'above' où l'événement est déclenché. Le facteur de complication, dans vanilla js, est que chaque navigateur gère différemment les événements de mutation DOM. – Ichorus

+0

GWT 'capture' les événements avec GWTEventSystem pour essayer de créer un schéma de gestion d'événement unifié. Les événements suivent le schéma de bulles d'arbres décrit ci-dessus, mais pour chaque événement déclenché, il passe d'abord par le GWT HandlerManager qui recherche les gestionnaires enregistrés pour ce type d'événement. S'il en trouve un, il déclenche le code EventHandler sinon il le renvoie au navigateur pour un traitement standard. Qu'est-ce que vous essayez de faire, exactement? – Ichorus

Questions connexes