Mottryck och pipelining
Hantera flödeskontroll med pipeTo och pipeThrough.
Mottryck och pipelining är en gratis lektion i JavaScript Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för JavaScript Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i JavaScript Academy innehåller totalt 4 lektioner.
Problemet med backpressure
Om en producent genererar data snabbare än en konsument hinner hantera den fylls minnet upp. Backpressure är mekanismen som gör att en långsam konsument kan be en snabb producent att sänka takten.
WritableStream
En WritableStream är ett mål som du skriver chunkar till. Dess sink-metod write(chunk) kan vara asynkron och signalerar då när nästa chunk kan tas emot.
const sink = new WritableStream({
write(chunk) {
console.log("writing", chunk);
}
});Hämta en writer
getWriter() låser den skrivbara strömmen och returnerar en writer med write(), close() och ett ready-löfte.
const writer = sink.getWriter();
await writer.write("hello");
await writer.close();Signalen ready
Vänta på writer.ready innan du skriver. Löftet uppfylls när strömmen kan ta emot mer data – det är backpressure i praktiken.
await writer.ready;
await writer.write(chunk);pipeTo
readable.pipeTo(writable) kopplar en källa till ett mål och hanterar automatiskt backpressure åt dig. Metoden returnerar ett löfte som uppfylls när pipeliningen är klar.
await readableStream.pipeTo(writableStream);
console.log("done piping");pipeThrough
pipeThrough(transform) infogar en transformering mellan källa och sink och returnerar den transformerade läsbara strömmen. Kedja flera för att bygga en pipeline.
sourceStream
.pipeThrough(new TextDecoderStream())
.pipeThrough(parser)
.pipeTo(consumer);Highwater marks
En köstrategis highWaterMark anger hur många chunkar som får köas innan backpressure aktiveras. Justera värdet för att balansera genomströmning och minnesanvändning.
new ReadableStream(source, new CountQueuingStrategy({ highWaterMark: 4 }));desiredSize
En controllers desiredSize anger hur mycket utrymme som finns kvar i kön. När värdet når noll eller blir negativt ska du sluta lägga till chunkar.
pull(controller) {
while (controller.desiredSize > 0) {
controller.enqueue(nextChunk());
}
}Avbryta en pipeline
Skicka { signal } till pipeTo för att avbryta hela pipelinen med en AbortController.
const ctrl = new AbortController();
readable.pipeTo(writable, { signal: ctrl.signal });
ctrl.abort();Pipelinealternativ
pipeTo accepterar preventClose, preventAbort och preventCancel för att styra hur fel och slutförande sprids mellan ändpunkterna.
readable.pipeTo(writable, { preventClose: true });En komplett pipeline
Om du sätter ihop allt kan du hämta byte, avkoda, transformera och skriva till en sink – allt med automatisk flödeskontroll.
const res = await fetch("/data");
await res.body
.pipeThrough(new TextDecoderStream())
.pipeThrough(lineSplitter)
.pipeTo(uiSink);Snabbtest
Testa backpressure.
Sammanfattning: backpressure och pipelining
Du lärde känna WritableStream och writers, väntade på ready för att hantera backpressure, kopplade samman strömmar med pipeTo/pipeThrough, justerade highWaterMark och övervakade desiredSize samt avbröt pipelines. Därmed är Streams API-kursen klar.
Lär dig JavaScript med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 59
- Lektioner
- 200
Vanliga frågor
Är lektionen ”Mottryck och pipelining” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen JavaScript Academy, inklusive ”Mottryck och pipelining”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i JavaScript Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Mottryck och pipelining”?
Hantera flödeskontroll med pipeTo och pipeThrough. Ni övar på JavaScript Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig JavaScript Academy?
Du behöver inga förkunskaper. Utbildningen i JavaScript Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Mottryck och pipelining”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här JavaScript Academy-lektionen?
Ja. Varje JavaScript Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Läsbara strömmar
- fetch-svar som strömmar
- Transformströmmar
- Mottryck och pipelining