Desarrollador Node.js: pregunta de entrevista

¿Cómo gestionas backpressure en streams de Node.js?

Backpressure evita que un productor rápido sature a un consumidor lento. Respeta cuando writable.write devuelve false, espera drain o usa pipeline para controlar flujo, errores y limpieza conjuntamente.

Respuesta directa

Qué debe cubrir una buena respuesta

Cómo funciona

Una fuente legible que produce más rápido de lo que consume un destino escribible acumula en memoria hasta que el proceso muere, salvo que el productor frene. Writable.write devuelve false cuando su buffer interno superó el highWaterMark; el productor debe detenerse y reanudar con el evento drain. pipe y pipeline implementan este apretón de manos automáticamente, y pipeline además propaga errores y destruye cada stream de la cadena si algo falla. Los Transform intermedios heredan el mismo contrato, y la iteración asíncrona con for await sobre un legible también lo respeta.

Ejemplo

Copiar un fichero de 10 GB a S3 con readStream.on('data', chunk => upload.write(chunk)) llevó la memoria a varios gigabytes porque el disco leía más rápido que la red; sustituirlo por pipeline(readStream, gzip, uploadStream) mantuvo la memoria plana en el tamaño del buffer. Una importación CSV que inserta filas usa un Transform con escritura asíncrona que espera a la base de datos, así que el lector del fichero se pausa cuando la base de datos se retrasa.

Errores frecuentes

  • Ignorar el valor de retorno de write y dejar crecer el buffer.
  • Usar pipe sin manejador de errores, de modo que un fallo deja streams abiertos.
  • Leer un fichero entero con readFile cuando un stream mantendría la memoria acotada.

Una estructura útil para responder

Responde desde tu propia experiencia.

No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.

Practica esta respuesta con MiraHint

Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.

Descargar MiraHint
Preguntas de entrevista para Desarrollador Node.js