Mejores prácticas de Streams
Los streams mantienen los servicios de Node estables en memoria; estas reglas previenen sockets colgados, OOM por buffers ilimitados y pérdida silenciosa de datos en eventos error no manejados.
Busca en todas las páginas de la documentación
Los streams mantienen los servicios de Node estables en memoria; estas reglas previenen sockets colgados, OOM por buffers ilimitados y pérdida silenciosa de datos en eventos error no manejados.
.pipe().pipe() manual sin manejadores de errores como un impedimento para la revisión.stream/promises.pipeline en lugar de cadenas pipe simples. Destrucción automática en caso de error.await pipeline(...) en un try/catch en los manejadores HTTP. Mapea a 500 solo si los encabezados no se han enviado.error si no usas pipeline. Excepciones raras para código heredado con ticket de migración.req.on('aborted') o AbortSignal._flush en Transforms que almacenan en búfer fragmentos/líneas parciales. No pierdas datos finales.write() devuelva false en bucles personalizados. Pausa hasta drain.highWaterMark con mediciones, no con conjeturas. Observa el heap y la latencia p99.Array ilimitados de fragmentos antes de la concatenación. Usa pipeline o una cola limitada.content-type y de disposición antes de los bytes del cuerpo. Requerido para descargas y NDJSON.Content-Length cuando el tamaño sea conocido. Mejor comportamiento de CDN y progreso de descarga.Readable.from para fuentes simples. Subclase Readable cuando se necesite _read con estado.fromWeb/toWeb en los límites de fetch. No almacenes en búfer response.arrayBuffer() por defecto.Las cadenas de pipe manuales a menudo omiten la propagación de errores, lo que provoca fugas de sockets y manejadores de archivos en producción.
Cargas útiles pequeñas de tamaño conocido (escala de KB), HMAC criptográfico sobre un cuerpo limitado, transformaciones en memoria en pruebas.
El analizador JSON predeterminado almacena en búfer; usa stream sin procesar o busboy para cargas de streaming multipart.
Fastify admite respuestas de stream de forma nativa; aún así, usa pipeline para el procesamiento de múltiples etapas antes de la respuesta.
@aws-sdk/lib-storage Carga con cuerpo de stream: respeta la contrapresión a la API multipart de S3.
El protocolo Redis es de solicitud/respuesta; generalmente no es un sumidero de stream grabable; usa comandos o APIs de cliente dedicadas.
Grabable con _write asíncrono lento y productor empujando rápido: afirma que la memoria es estable con el tiempo.
No, opta explícitamente cuando transmitas registros/eventos, no bytes.
Misma API: prueba streams de archivos grandes en el sistema operativo de implementación de destino para detectar interferencias de antivirus.
El trabajo pesado de CPU por fragmento puede pertenecer a un worker; el stream coordina el flujo en el hilo principal.
Usa los patrones del adaptador subyacente de Express/Fastify o las APIs de respuesta de stream de @nestjs/platform-fastify.
Leer toda la carga en un Buffer en el borde: siempre transmite al almacenamiento con límites de tamaño.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026