Node.js y APIs con Express

Node: runtime, event loop y como pensar rendimiento

Node: el runtime, el event loop y cómo pensar el rendimiento Node.js es un entorno de ejecución de JavaScript construido sobre el motor V8 de Chrome. Su superpoder no es la velocidad bruta de cálculo, sino su modelo de concurrencia: un único hilo principal que nunca se queda esperando una operación de entrada/salida (leer un archivo, consultar una base de datos, llamar a otra API). En lugar de bloquearse, delega esas operaciones y sigue atendiendo otras peticiones. Por eso Node brilla en APIs co
Tiempo de estudio
18 Min

Node: el runtime, el event loop y cómo pensar el rendimiento


Node.js es un entorno de ejecución de JavaScript construido sobre el motor V8 de Chrome. Su superpoder no es la velocidad bruta de cálculo, sino su modelo de concurrencia: un único hilo principal que nunca se queda esperando una operación de entrada/salida (leer un archivo, consultar una base de datos, llamar a otra API). En lugar de bloquearse, delega esas operaciones y sigue atendiendo otras peticiones. Por eso Node brilla en APIs con mucha I/O y muchas conexiones simultáneas.



El event loop en una frase


El event loop es el bucle que decide qué función se ejecuta a continuación cuando el hilo principal está libre. Hay dos colas que debes recordar: las macrotareas (como setTimeout o una operación de I/O completada) y las microtareas (las promesas resueltas, .then() y await). Las microtareas siempre se vacían por completo antes de pasar a la siguiente macrotarea.



Idea clave

  • Trabajo de I/O (red, disco, base de datos): Node lo maneja sin esfuerzo.
  • Trabajo de CPU (cifrar, comprimir, procesar imágenes): bloquea el único hilo y frena todas las peticiones.


Ejemplo: predice el orden de salida


console.log('1: start');
setTimeout(() => console.log('4: timer (macrotarea)'), 0);
Promise.resolve().then(() => console.log('3: microtarea'));
console.log('2: end');

El orden real es 1, 2, 3, 4. Primero corre todo el código síncrono (1 y 2). Antes de tocar el setTimeout, el event loop vacía las microtareas (3). El temporizador (4) llega al final, aunque su retraso sea 0.



¿Qué tipo de tarea bloquea el hilo principal y degrada toda la API?

El hashing intensivo es trabajo de CPU. Si lo haces de forma síncrona en el hilo principal, ninguna otra petición avanza hasta que termina. La I/O (Postgres, archivos) se delega y no bloquea.


Ejercicio práctico


Objetivo: demostrar que entiendes el orden de ejecución y detectar trabajo CPU-bound.



  1. Crea un archivo loop.js y pega el snippet de arriba. Ejecútalo con node loop.js y confirma el orden.

  2. Añade un queueMicrotask(() => console.log('otra microtarea')) y predice dónde aparece antes de correrlo.

  3. Escribe una función con un bucle for de 5.000 millones de iteraciones y mídela con console.time. Observa cómo congela el proceso.


Entregable: un archivo con tu predicción en comentarios y la salida real pegada debajo, más una frase explicando por qué el bucle pesado es peligroso en un handler HTTP.



Para recordar

  • Node es un solo hilo: la I/O se delega, la CPU se queda.
  • Las microtareas (promesas) se vacían antes de cada macrotarea.
  • Nunca metas cálculos pesados en un handler; aíslalos en un worker o un servicio aparte.
Texto Leccion 1/12
Estas viendo
Node: runtime, event loop y como pensar rendimiento
Hablar por WhatsAppContactar por WhatsApp