La planification de Node.js a plus de sens une fois que vous séparez les micro-tâches des phases_
L'ordre entre `process.nextTick`, les promesses, les temporisateurs et `setImmediate` est plus facile à comprendre lorsque vous savez où se trouve chaque file d'attente.
La boucle d'événements de Node.js semble mystérieuse jusqu'à ce que vous cessiez de la considérer comme une seule file d'attente.
Il y a plusieurs files d'attente et plusieurs priorités impliquées, et la partie la plus déroutante pour de nombreux ingénieurs est que les micro-tâches ne sont pas la même chose que la boucle de phases principale de libuv.
process.nextTick s'exécute avant d'autres micro-tâches dans Node
les rappels de promesse s'exécutent avant que la boucle d'événements ne passe aux phases ultérieures
les temporisateurs et setImmediate appartiennent à différentes phases ultérieures
C'est pourquoi process.nextTick est si puissant et si facile à mal utiliser.
Pourquoi nextTick Peut Vous Nuire
Si vous planifiez récursivement davantage de travail avec nextTick, vous pouvez affamer l'I/O car Node continue de vider cette file d'attente avant de passer à autre chose.
C'est pourquoi nextTick doit être utilisé avec parcimonie.
Si vous devez céder afin que la boucle d'événements puisse continuer à servir le processus, setImmediate est souvent l'outil le plus sain.
La Valeur Technique
Ce n'est pas une simple question de trivia d'entretien.
Cela compte lorsque vous êtes :
en train de diagnostiquer des pics de latence
en train de déboguer un ordre de rappel étrange
essayant d'éviter d'affamer l'I/O
La boucle d'événements cesse de sembler magique une fois que vous pensez en termes de files d'attente et de points de planification au lieu de "le code asynchrone se produit plus tard."