Utilisation du Planificateur GWT

J'ai du mal à comprendre la différence entre les différentes méthodes de l'interface com.google.gwt.core.client.Scheduler, en particulier, le scheduleDeferred, scheduleFinally, et scheduleIncremental méthodes.

Je suis gêné dans ma compréhension, je pense, par ma méconnaissance de la boucle de traitement des événements du navigateur, à laquelle se réfère la documentation du Planificateur.

Pourriez-vous expliquer en quoi ces méthodes diffèrent les unes des autres et comment elles fonctionnent par rapport à la boucle d'Événement du navigateur?

26
demandé sur David 2011-02-27 05:40:57

1 réponses

JavaScript (dans un navigateur) est un thread simple. Le modèle de boucle d'événement signifie que nous sommes toujours exactement dans l'un des deux états:

  • dans la boucle d'événement
  • exécution d'un gestionnaire d'événements

Il existe plusieurs types d'événements: cliquez sur Événements, Événements onload, événements XHR, événements timer,... Vous devrez déclarer certains gestionnaires (au moins un lors du chargement de la page), sinon aucun de votre code ne sera jamais exécuté. L'un d'eux est le Gestionnaire que vous spécifiez en implémentant onModuleLoad.

Il est important de garder tous les gestionnaires courts, car il n'y a pas de parallélisme et pas d'interruptions (sauf pour l'interruption de dernier recours "script ne répondant pas"). Cela signifie que les utilisateurs ne peuvent pas interagir avec l'interface, jusqu'à ce que le navigateur retourne à la boucle d'événement-et cela ne se produit pas avant la fin du gestionnaire actuel.

Donc, si vous voulez reporter du code jusqu'à ce que les autres gestionnaires d'événements aient eu une chance, alors vous pouvez utiliser Scheduler.scheduleDeferred.

Scheduler.scheduleIncremental vous aide à découper très longues tâches en plusieurs étapes, donnant aux autres gestionnaires d'événements une chance entre chacune des étapes.

Scheduler.scheduleFinally juste signifie: Après avoir géré notre gestionnaire actuel (même si une exception se produit), mais avant de revenir à la boucle d'événement, exécutez ma commande.

Voir com.Google.gwt.core.client.impl.Impl.entry0()

42
répondu Chris Lercher 2013-04-02 16:40:58