0Pricing
JavaScript Academy · Aula

Contrapressão e canalização

Gerencie o controle do fluxo com pipeTo e pipeThrough.

Contrapressão e canalização é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 4 aulas no total.

O problema da contrapressão

Se um produtor gera dados mais rapidamente do que um consumidor consegue processá-los, a memória fica cheia. A contrapressão é o mecanismo pelo qual um consumidor lento informa a um produtor rápido que ele deve diminuir a velocidade.

WritableStream

Um WritableStream é um destino no qual você grava blocos. Seu método de destino write(chunk) pode ser assíncrono, sinalizando que está pronto para o próximo bloco.

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

Obtendo um gravador

getWriter() bloqueia o fluxo gravável e retorna um gravador com write(), close() e uma promessa ready.

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

O sinal ready

Aguarde writer.ready antes de gravar. A promessa é resolvida quando o fluxo pode aceitar mais dados — isso é a contrapressão em ação.

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

pipeTo

readable.pipeTo(writable) conecta uma fonte a um destino e gerencia automaticamente a contrapressão para você. Ele retorna uma promessa que é resolvida quando o encadeamento é concluído.

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

pipeThrough

pipeThrough(transform) insere uma transformação entre a fonte e o destino, retornando o fluxo legível transformado. Encadeie várias transformações para criar um fluxo de processamento.

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

Limites de alta ocupação

O highWaterMark de uma estratégia de enfileiramento define quantos blocos podem ser enfileirados antes que a contrapressão seja ativada. Ajuste esse valor para equilibrar o desempenho e o uso de memória.

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

desiredSize

O controlador desiredSize informa ao produtor quanto espaço ainda há na fila. Quando esse valor chega a zero ou fica abaixo de zero, pare de enfileirar dados.

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

Interrompendo um fluxo

Passe { signal } para pipeTo a fim de interromper todo o fluxo de processamento com um AbortController.

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

Opções de encadeamento

pipeTo aceita preventClose, preventAbort e preventCancel para controlar como os erros e a conclusão são propagados entre as extremidades.

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

Um fluxo completo

Juntando tudo: buscar bytes, decodificar, transformar e gravar em um destino — tudo com controle automático do fluxo.

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

Verificação rápida

Teste a contrapressão.

Recapitulação: contrapressão e encadeamento

Você conheceu WritableStream e os gravadores, aguardou ready para lidar com a contrapressão, conectou fluxos com pipeTo/pipeThrough, ajustou highWaterMark e acompanhou desiredSize, além de interromper fluxos de processamento. Isso conclui a API de fluxos.

Perguntas Frequentes

A aula “Contrapressão e canalização” é grátis?

Sim — o texto completo de “Contrapressão e canalização” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 4 aulas no total.

O que vou aprender em “Contrapressão e canalização”?

Gerencie o controle do fluxo com pipeTo e pipeThrough. Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar JavaScript Academy?

Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Contrapressão e canalização”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de JavaScript Academy?

Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Streams legíveis
  2. Respostas de fetch em fluxo
  3. Streams de transformação
  4. Contrapressão e canalização
← Voltar para JavaScript Academy