Node.js - 3.11 Code bloquant et code non bloquant

Certaines opérations, comme écrire un fichier, prennent du temps. Une méthode synchrone attend la fin de l'opération avant de poursuivre, ce qui bloque le serveur. Cette leçon compare cette méthode avec la version asynchrone, qui utilise une fonction de rappel.

Le mode synchrone bloque le programme

La méthode writeFileSync écrit le fichier, et ne rend la main qu'une fois l'opération terminée. Le code suivant, comme les autres demandes, attend pendant ce temps.

Pour un petit texte, la différence est imperceptible. Pour un fichier de plusieurs centaines de mégaoctets, le serveur peut rester bloqué longtemps, ce qui doit être évité.

fs.writeFileSync('<nom-du-fichier>', '<contenu>');

Le mode asynchrone avec une fonction de rappel

La méthode writeFile prend un troisième argument : une fonction de rappel. Elle est appelée quand l'écriture est terminée, et le serveur continue de traiter d'autres demandes entre-temps.

Cette fonction reçoit un objet d'erreur, qui vaut null si tout s'est bien passé. En cas de problème, comme une autorisation refusée, l'erreur permet d'envoyer une réponse adaptée.

fs.writeFile('<nom-du-fichier>', '<contenu>', (erreur) => {
  console.log(erreur);
});

Envoyer la réponse dans le rappel

Dans l'exemple, la réponse est envoyée à l'intérieur de la fonction de rappel, car elle ne doit partir qu'une fois le fichier écrit.

Cette architecture laisse le système d'exploitation faire le travail d'écriture, pendant que Node.js continue de gérer la boucle d'événements.

En résumé

writeFileSync bloque le programme jusqu'à la fin de l'écriture. writeFile est asynchrone : il appelle une fonction de rappel une fois le travail terminé. La réponse doit alors être envoyée dans ce rappel. Sur un serveur, le mode asynchrone est à privilégier.

Points clés

  • writeFileSync bloque le programme jusqu'à la fin de l'opération.
  • writeFile prend une fonction de rappel en troisième argument.
  • Le rappel reçoit un objet d'erreur, égal à null en cas de succès.
  • Pendant une opération synchrone, les autres demandes ne sont pas traitées.
  • La réponse doit être envoyée dans le rappel, une fois le fichier écrit.

Questions fréquentes

Quand peut-on utiliser writeFileSync ?

Le formateur indique qu'il peut suffire pour une opération très courte, mais la version asynchrone reste préférable.

Que contient l'argument d'erreur du rappel ?

Il vaut null quand l'écriture réussit. En cas de problème, comme des autorisations insuffisantes, il contient un objet d'erreur.

Pourquoi un fichier volumineux pose-t-il problème ?

Pendant une opération synchrone, les autres demandes des utilisateurs ne sont pas traitées, ce qui peut bloquer le serveur longtemps.