Streams i backpressure — jak przetwarzać duży plik?
Najpierw odpowiedz na głos lub w myślach, potem porównaj.
Odpowiedź
Stream pozwala przetwarzać dane porcjami bez ładowania całości do pamięci. Typy to Readable, Writable, Duplex i Transform.
JavaScript
import { createReadStream, createWriteStream } from 'node:fs';
import { pipeline } from 'node:stream/promises';
import { createGzip } from 'node:zlib';
await pipeline(
createReadStream('input.txt'),
createGzip(),
createWriteStream('output.txt.gz')
);Backpressure: odbiorca może nie nadążać; producent powinien ograniczyć tempo zamiast bez końca buforować dane. Pipeline koordynuje przepływ, zakończenie i błędy.
Pułapka: stream nie czyni pracy bezkosztową. Limituję rozmiar buforów i uwzględniam błędy oraz przerwanie operacji.
Jak poszło? Bądź szczery — „Jeszcze nie” dodaje pytanie do powtórki.
Powiązane pytania
- B09 · Jak przygotować duży eksport bez wczytywania wszystkiego do pamięci? — JavaScript, TypeScript i Node.js