0Pricing
JavaScript Academy · Lezione

Backpressure e piping

Gestisca il controllo del flusso con pipeTo e pipeThrough.

Backpressure e piping è una lezione JavaScript Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento JavaScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso JavaScript Academy include 4 lezioni in totale.

Il problema della backpressure

Se un produttore genera dati più velocemente di quanto un consumatore riesca a gestirli, la memoria si riempie. La backpressure è il meccanismo con cui un consumatore lento comunica a un produttore veloce di rallentare.

WritableStream

Un WritableStream è una destinazione in cui si scrivono i chunk. Il suo metodo sink write(chunk) può essere asincrono e segnalare quando è possibile accettare il chunk successivo.

const sink = new WritableStream({
  write(chunk) {
    console.log("writing", chunk);
  }
});

Ottenere un writer

getWriter() blocca il writable e restituisce un writer con write(), close() e una promise ready.

const writer = sink.getWriter();
await writer.write("hello");
await writer.close();

Il segnale ready

Attenda writer.ready prima di scrivere. La promise viene risolta quando lo stream può accettare altri dati: è la backpressure in azione.

await writer.ready;
await writer.write(chunk);

pipeTo

readable.pipeTo(writable) collega una sorgente a una destinazione e gestisce automaticamente la backpressure. Restituisce una promise che viene risolta quando il piping è completato.

await readableStream.pipeTo(writableStream);
console.log("done piping");

pipeThrough

pipeThrough(transform) inserisce una trasformazione tra sorgente e sink e restituisce il readable trasformato. Può concatenarne diversi per creare una pipeline.

sourceStream
  .pipeThrough(new TextDecoderStream())
  .pipeThrough(parser)
  .pipeTo(consumer);

High water mark

highWaterMark di una strategia di accodamento stabilisce quanti chunk possono essere messi in coda prima che si attivi la backpressure. Lo regoli per bilanciare velocità di elaborazione e memoria.

new ReadableStream(source, new CountQueuingStrategy({ highWaterMark: 4 }));

desiredSize

desiredSize di un controller indica quanto spazio rimane nella coda per il produttore. Quando raggiunge lo zero o un valore negativo, interrompa l'accodamento.

pull(controller) {
  while (controller.desiredSize > 0) {
    controller.enqueue(nextChunk());
  }
}

Interrompere una pipe

Passi { signal } a pipeTo per interrompere l'intera pipeline con un AbortController.

const ctrl = new AbortController();
readable.pipeTo(writable, { signal: ctrl.signal });
ctrl.abort();

Opzioni di pipe

pipeTo accetta preventClose, preventAbort e preventCancel per controllare la propagazione di errori e completamento tra le estremità.

readable.pipeTo(writable, { preventClose: true });

Una pipeline completa

Metta tutto insieme: recuperi i byte, li decodifichi e trasformi, quindi li scriva in un sink, con il controllo automatico del flusso.

const res = await fetch("/data");
await res.body
  .pipeThrough(new TextDecoderStream())
  .pipeThrough(lineSplitter)
  .pipeTo(uiSink);

Verifica rapida

Verifichi la backpressure.

Riepilogo: backpressure e piping

Ha conosciuto WritableStream e i writer, ha atteso ready per gestire la backpressure, ha collegato gli stream con pipeTo/pipeThrough, ha regolato highWaterMark e osservato desiredSize, oltre a interrompere le pipeline. Con questo completa l'API Streams.

Domande Frequenti

La lezione «Backpressure e piping» è gratuita?

Sì — il testo completo di «Backpressure e piping» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso JavaScript Academy, passa a CoddyKit PRO. Il corso JavaScript Academy include 4 lezioni in totale.

Cosa imparerò in «Backpressure e piping»?

Gestisca il controllo del flusso con pipeTo e pipeThrough. Eserciti JavaScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare JavaScript Academy?

Non è richiesta alcuna esperienza precedente. JavaScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Backpressure e piping»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione JavaScript Academy?

Sì. Ogni lezione JavaScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Readable Stream
  2. Risposte streaming di fetch
  3. Stream di trasformazione
  4. Backpressure e piping
← Torna a JavaScript Academy