Streams (JavaScript)

Aujourd'hui, on va parler d'une notion super utile dans le monde de JavaScript : les streams.

Qu'est-ce qu'un stream en JavaScript ?

Un stream est une manière de traiter des données en flux, comme un fichier (Manipulation de fichiers) ou une requêtes HTTP. L'idée est simple : au lieu de charger tout le contenu à la fois, vous pouvez lire et écrire des chunks (ou morceaux) de données peu à peu.

Cela permet de gagner en Performances, car vous n'avez pas à charger tout le contenu en mémoire vive d'un coup. C'est particulièrement utile pour les fichiers volumineux ou les requêtes qui prennent du temps à se répondre.

Un exemple de code en TypeScript

Voici un petit exemple de code en TypeScript qui utilise les streams pour lire un fichier texte :

import { createReadStream } from 'fs';
import { pipeline } from 'stream';

const fileStream = createReadStream('example.txt');

fileStream.pipe(
  new Transform({ transform: (chunk, encoding, callback) => {
    // Traitement du chunk de données
    const processedChunk = chunk.toString().toUpperCase();
    callback(null, processedChunk);
  } })
)
.pipe(process.stdout);

pipeline(fileStream, ...).on('finish', () => {
  console.log('Fichier traité avec succès!');
});

Dans cet exemple, nous créons un stream de fichier en utilisant la méthode createReadStream de 'fs'. Ensuite, nous utilisons la méthode pipe pour lier ce stream à un autre stream qui applique une transformation à chaque chunk de données. Dans cet exemple, la transformation consiste à convertir le texte en majuscules.

Enfin, nous utilisons la méthode pipeline pour créer un pipeline qui relie les streams ensemble et lance l'événement 'finish' lorsque tout le fichier a été traité.

Conclusion

Les streams sont une puissante manière de gérer les données en flux dans JavaScript. Ils permettent de traiter des données de manière asynchrone, ce qui est particulièrement utile pour les fichiers volumineux ou les requêtes qui prennent du temps à se répondre.

J'espère que cela vous a donné une idée claire sur les streams en JavaScript !

Voilà quelques notions du domaine des streams et des pipelines qui vous intéresseront peut-être :

  1. Transform Streams : Un stream qui applique une transformation à chaque chunk de données, comme le code que j'ai montré plus tôt.
  2. Pipeable : Une classe ou un objet qui peut être utilisé comme source (ou destination) dans un pipeline.
  3. Duplex Stream : Un stream qui est à la fois une source et une destination, ce qui signifie qu'il peut lire et écrire des données.
  4. PassThrough Stream : Un stream qui simplement passe les chunks de données sans les modifier.
  5. Composite Stream : Un stream qui est composé d'autres streams, permettant ainsi de créer des pipelines complexes.
  6. Transformable Stream : Un stream qui peut être transformé pour produire un autre stream avec des caractéristiques différentes.
  7. Readable Stream : Un stream qui peut lire des chunks de données, mais pas les écrire.
  8. Writable Stream : Un stream qui peut écrire des chunks de données, mais pas les lire.
  9. Concat Stream : Un stream qui concatène plusieurs streams ensemble pour produire un seul flux de données.

Et bien sûr, il y a beaucoup plus à explorer dans le domaine des streams et des pipelines !