web-dev-qa-db-fra.com

Node.js Spawn vs Execute

Dans une vidéo de formation en ligne que je regarde pour apprendre Node, le narrateur dit que "la génération est meilleure pour les processus plus longs impliquant de grandes quantités de données, tandis que l'exécution est meilleure pour les petits morceaux de données."

Pourquoi est-ce? Quelle est la différence entre le spawn child_process et les fonctions d'exécution dans Node.js, et quand puis-je savoir lequel utiliser?

20
Harry Cramer

La principale différence est que spawn est plus approprié pour les processus de longue durée avec une sortie énorme. spawn diffuse les entrées/sorties avec le processus enfant. exec sortie tamponnée dans un petit tampon (par défaut 200K). Aussi comme je sais exec premier sous-shell d'apparition, puis essayez d'exécuter votre processus. Pour réduire la longue histoire, utilisez spawn au cas où vous auriez besoin de beaucoup de données en streaming à partir du processus enfant et exec si vous avez besoin de fonctionnalités telles que les tubes Shell, les redirections ou même vous avez besoin d'exécuter plusieurs programmes en une fois.

Quelques liens utiles - DZoneHacksparrow

3
Vasyl Moskalov

Un bon point de départ est le NodeJS documentation .

Pour 'spawn', la documentation indique:

La méthode child_process.spawn () génère un nouveau processus à l'aide de la commande donnée, avec des arguments de ligne de commande dans args. S'il est omis, args prend par défaut un tableau vide.

Alors que pour 'exec':

Génère un Shell puis exécute la commande dans ce Shell, en tamponnant toute sortie générée. La chaîne de commande passée à la fonction exec est traitée directement par le shell et les caractères spéciaux (varient en fonction du shell) doivent être traités en conséquence.

L'essentiel semble être de savoir si vous devez gérer la sortie de la commande ou non, ce qui, j'imagine, pourrait être le facteur affectant les performances (je n'ai pas comparé). Si vous ne vous souciez que de l'achèvement du processus, et non de sa sortie, alors "spawn" semble suffisant.

3
Andre M