Melhores Práticas de Streams
Streams mantêm os serviços Node estáveis em memória - estas regras evitam sockets travados, OOM (Out Of Memory) de buffers ilimitados e perda silenciosa de dados em eventos error não tratados.
Busque em todas as páginas da documentação
Streams mantêm os serviços Node estáveis em memória - estas regras evitam sockets travados, OOM (Out Of Memory) de buffers ilimitados e perda silenciosa de dados em eventos error não tratados.
.pipe().pipe() manual sem manipuladores de erro como um bloqueador de revisão.curl rápidos em localhost.stream/promises.pipeline em vez de correntes de pipe brutas. Destruição automática em caso de erro.await pipeline(...) em try/catch em manipuladores HTTP. Mapeie para 500 apenas se os cabeçalhos não foram enviados.error se não estiver usando pipeline. Exceções raras para código legado com ticket de migração.req.on('aborted') ou AbortSignal._flush em Transforms que fazem buffer de frames/linhas parciais. Não perca dados finais.write() retornando false em loops personalizados. Pause até drain.highWaterMark com medições, não suposições. Observe o heap e a latência p99.Array ilimitado de chunks antes da concatenação. Use pipeline ou fila limitada.content-type e disposition antes dos bytes do corpo. Necessário para downloads e NDJSON.Content-Length quando o tamanho for conhecido. Melhor comportamento de CDN e progresso de download.Readable.from para iteráveis assíncronos para fontes simples. Subclasse Readable quando _read com estado for necessário.fromWeb/toWeb nas fronteiras de fetch. Não faça buffer de response.arrayBuffer() por padrão.Correntes de pipe manuais frequentemente perdem a propagação de erros - vazam sockets e handles de arquivo em produção.
Payloads pequenos de tamanho conhecido (escala de KB), HMAC criptográfico sobre corpo limitado, transformações em memória em testes.
O parser JSON padrão faz buffer - use stream bruto ou busboy para uploads de streaming multipart.
Fastify suporta respostas de stream nativamente - ainda use pipeline para processamento multi-estágio antes da resposta.
@aws-sdk/lib-storage Upload com corpo de stream - respeita backpressure para a API multipart S3.
O protocolo Redis é request/response - geralmente não é um sink de stream Writable; use comandos ou APIs de cliente dedicadas.
Writable com _write assíncrono lento e produtor enviando rápido - afirme que a memória está estável ao longo do tempo.
Não - opte explicitamente ao transmitir registros/eventos, não bytes.
Mesma API - teste streams de arquivos grandes no SO de implantação de destino para interferência de antivírus.
Trabalho intensivo de CPU por chunk pode pertencer a um worker - stream coordena o fluxo na thread principal.
Use os padrões do adaptador Express/Fastify subjacente ou as APIs de resposta de stream do @nestjs/platform-fastify.
Ler o upload inteiro para Buffer na borda - sempre transmita para armazenamento com limites de tamanho.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5, e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026