Lección 1 de 12 · Lectura y práctica
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.
Del concepto a la práctica
Taller de esta lección
La decisión clave es separar trabajo de entrada y salida, que puede esperar sin bloquear, de cálculo síncrono prolongado, que ocupa el hilo principal. El orden de las colas permite predecir una salida concreta.
Ejemplo resuelto
console.log('inicio');
setTimeout(() => console.log('timer'), 0);
Promise.resolve().then(() => console.log('promesa'));
console.log('fin');La salida es inicio, fin, promesa, timer: la microtarea de la promesa se procesa antes que la macrotarea del temporizador.
Usa una suma pequeña y un número limitado de iteraciones para no bloquear tu máquina. Si insertas queueMicrotask antes del temporizador, la salida es inicio,fin,micro,promesa,timer porque la microtarea añadida primero se atiende primero en este ejemplo; no extrapoles ese orden a cualquier mezcla de I/O, setImmediate y temporizadores. async no traslada por sí solo un cálculo pesado a otro hilo.
Pruébalo
Guarda el fragmento en un archivo local.
Ejecútalo con Node.
Añade un bucle que calcule una suma grande y observa que retrasa otras tareas.
Error frecuente: afirmar que setTimeout(..., 0) se ejecuta inmediatamente. Corrige la explicación indicando que solo queda preparado para una fase posterior, cuando el hilo esté disponible.
Ejercicio: incorpora queueMicrotask(() => console.log('micro')) antes del temporizador.
Comprueba tu resultado
micro aparece antes de timer; conserva también el orden síncrono inicial.

Mapa de prácticaEl navegador envía una solicitud a la API. El servidor valida la operación y consulta los datos; después devuelve una respuesta que el navegador puede mostrar. La base de datos se comunica con el servidor y no directamente con el navegador.
Ver la infografía en tamaño completo ↗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?
Ejercicio práctico
Objetivo: demostrar que entiendes el orden de ejecución y detectar trabajo CPU-bound.
- Crea un archivo
loop.jsy pega el snippet de arriba. Ejecútalo connode loop.jsy confirma el orden. - Añade un
queueMicrotask(() => console.log('otra microtarea'))y predice dónde aparece antes de correrlo. - Escribe una función con un bucle
forde 5.000 millones de iteraciones y mídela conconsole.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.
Práctica acompañada: Una interfaz web de principio a fin
Estado, formularios y una API pequeña. Usa este cuaderno como práctica complementaria de la ruta; el material original de la lección continúa siendo tu referencia.
Práctica: cuatro pruebas de comportamiento
Prueba un título normal, solo espacios, 121 caracteres y una falla de red simulada. Registra la respuesta y el estado de la interfaz. Repite usando solo teclado: debes llegar al campo, enviarlo y encontrar el error sin usar el ratón.
Después agrega una segunda tarea y cambia el orden de la lista. Comprueba que cada botón sigue actuando sobre el elemento correcto. Si trabajas con microservicios, dibuja qué servicio posee el dato y qué ocurre si la dependencia no responde. No necesitas una infraestructura distribuida para aprender a definir tiempos de espera y errores comprensibles.
Comprueba tu entrega
Entrega el código, el contrato de API y evidencia de las cuatro pruebas. Indica si los datos se guardan o desaparecen al recargar. Una demostración en memoria debe decirlo para que nadie confunda un prototipo con almacenamiento persistente.
Sigue con Node.js y APIs con Express
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.