Je viens de terminer la lecture de la spécification Promises/A + et je suis tombé sur les termes microtask et macrotask: voir http://promisesaplus.com/#notes
Je n'ai jamais entendu parler de ces termes auparavant, et maintenant je suis curieux de savoir quelle pourrait être la différence?
J'ai déjà essayé de trouver des informations sur le Web, mais tout ce que j'ai trouvé est ce billet des archives de w3.org (qui ne m'explique pas la différence): http: //lists.w3 .org/Archives/Public/public-nextweb/2013Jul/0018.html
De plus, j'ai trouvé un module npm appelé "macrotask": https://www.npmjs.org/package/macrotask Encore une fois, la différence n'est pas clairement définie.
Tout ce que je sais, c'est que cela a quelque chose à voir avec la boucle d'événement, comme décrit dans https://html.spec.whatwg.org/multipage/webappapis.html#task-queue et - https://html.spec.whatwg.org/multipage/webappapis.html#perform-a-microtask-checkpoint
Je sais que je devrais théoriquement pouvoir extraire moi-même les différences, compte tenu de cette spécification WHATWG. Mais je suis sûr que d’autres pourraient également bénéficier d’une brève explication donnée par un expert.
Un tour de la boucle d'événement aura exactement un tâche en cours de traitement à partir de la file d'attente macrotask (cette file d'attente est simplement appelée la file d'attente de tâches = dans le spécification WHATWG ). Une fois ce macrotask terminé, tous les microtasks disponibles seront traités, à savoir dans le même cycle de remise des gaz. Pendant que ces microtaches sont traitées, elles peuvent mettre en file d’attente encore plus de microtasks, qui seront toutes exécutées une par une, jusqu’à épuisement de la file d’attente de microtaches.
Si un microtask met automatiquement en file d'attente d'autres microtaches, le traitement du macrotask suivant peut prendre beaucoup de temps. Cela signifie que vous risquez de vous retrouver avec une interface utilisateur bloquée ou une activité inactive terminée dans votre application.
Cependant, du moins en ce qui concerne la fonction process.nextTick de Node.js (qui met en file d'attente microtasks), il existe une protection intégrée contre ce blocage par le biais de process.maxTickDepth. Cette valeur est définie sur une valeur par défaut de 1000, réduisant ainsi le traitement ultérieur de microtasks une fois cette limite atteinte, ce qui permet de traiter le prochain [macrotask)
Fondamentalement, utilisez microtasks lorsque vous devez exécuter des tâches de manière synchrone de manière asynchrone (c.-à-d. Lorsque vous dites effectuez cette (micro-) tâche dans un avenir très immédiat) . Sinon, respectez macrotasks.
macrotasks: setTimeout, setInterval, setImmediate, requestAnimationFrame, E/S, rendu de l'interface utilisateur
microtasks: process.nextTick, Promises, Object.observe, MutationObserver
J'ai écrit un article à ce sujet, comprenant des exemples interactifs https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
Mise à jour: j'ai également donné une conférence à ce sujet https://www.youtube.com/watch?v=cCOL7MC4Pl . La discussion va plus en détail, y compris la façon dont les tâches et les micro-tâches interagissent avec le rendu.
lorsque pile d'appels est vide, effectuez les étapes suivantes: