Saltar al contenido

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

js
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

  1. Guarda el fragmento en un archivo local.

  2. Ejecútalo con Node.

  3. 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.

Navegador, API y base de datos conectados por solicitudes, consultas y respuestas en sentidos opuestos.
CursaloMapa de práctica
Del navegador a los datos

El 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?

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.

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.

Estado, formularios y una API pequeña: HTML, Estado, Validación, Respuesta
De la idea al resultado: una secuencia para practicar y revisar.

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.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.