Quelles sont les cas d'utilisation pour le processus.nextTick dans Node.js?
J'ai vu processus.nextTick
utilisé dans quelques endroits et ne pouvez pas vraiment dire ce qu'il est utilisé pour des.
- https://github.com/andrewvc/node-paperboy/blob/master/lib/paperboy.js#L24
- https://github.com/substack/node-browserify/blob/master/index.js#L95
Quels sont les principaux/utilisation correcte des cas de process.nextTick
dans Node.js? Les docs disent en gros que c'est plus optimisé façon de faire setTimeout
, mais cela n'aide pas beaucoup.
J'ai l'habitude de faire beaucoup d'ActionScript, donc l'idée de "l'attente jusqu'à la prochaine image" afin d'exécuter du code du sens à un certain niveau - si vous êtes en cours d'exécution d'une animation, vous pouvez l'avoir mise à jour à chaque image plutôt que de tous les millièmes de seconde par exemple. Il est également judicieux lorsque vous souhaitez coordonner la fixation d'un tas de variables - vous de changer les variables dans l'image 1, et appliquer les modifications dans l'image 2. Flex œuvre quelque chose comme cela dans leur composante du cycle de vie.
Ma question est, que dois-je utiliser pour en JavaScript côté serveur? Je ne vois pas de lieux dès le départ où vous auriez besoin de ce genre de affiné performance/contrôle de flux. Il suffit de regarder pour un point dans la bonne direction.
- Howtonode a un excellent article sur la compréhension de
process.nextTick()
Vous devez vous connecter pour publier un commentaire.
process.nextTick
met un rappel dans une file d'attente. Chaque rappel dans cette file d'attente sera exécuté au début de la prochaine tique de la boucle d'événements. Il est essentiellement utilisé comme un moyen de l'effacer de votre pile d'appel. Lorsque la documentation dit qu'il est commesetTimeout
, c'est-à-dire c'est comme utilisersetTimeout(function() { ... }, 1)
dans le navigateur. Il a même des cas d'utilisation.Un exemple d'utilisation serait le cas, vous créez un constructeur pour un objet qui a besoin d'événements liés. Cependant, vous ne pouvez pas démarrer en émettant des événements tout de suite, car le code de l'instanciation, il n'a pas eu le temps de se lier à des événements encore. Votre appel du constructeur est au-dessus d'eux dans la pile d'appel, et si vous continuez à faire synchrone choses, il va rester de cette façon. Dans ce cas, vous pourriez utiliser un
process.nextTick
avant de procéder à ce que vous étiez sur le point de le faire. Il garantit que la personne à l'aide de votre constructeur aura assez de temps pour lier les événements.Exemple:
Exemple Middleware à l'aide de ce constructeur
Il met tout simplement votre fonction à la fin de la boucle des événements. Habituellement, lorsque vous faites partie lourde de traitement synchrone, il est préférable d'utiliser le processus.nextTick pour tous les morceaux de code, afin de s'assurer que le processus ne serait pas bloquer d'autres événements. Lorsque vous faites cela, après qu'il a atteint proess.nextTick et la fonction se termine, il traite d'autres événements tels que des requêtes http, puis il atteint processus.nextTick de rappel et l'exécute.
Autre que cela, si vous pouvez l'utiliser pour exécuter une fonction récursive, sans arriver pile d'appel a débordé!
Edit: pour l'instant il n'y a nœud setImmediate fonction que l'annexe de la fonction à exécuter après en attente d'e/S des événements(comme le traitement des nouvelles demandes web): j'ai expliqué un cas d'utilisation dans la réponse à cette question.