0.1¿Qué es Node.js?
Lo esencial en 30 segundos
- Node.js = JavaScript fuera del navegador: el mismo lenguaje que en el front, con el motor V8, para servidores, API y herramientas.
- Modelo asíncrono no bloqueante: una operación lenta no detiene el programa — Node registra una devolución de llamada y continúa.
- Monohilo pero miles de conexiones: el bucle de eventos devuelve cada función cuando llega su resultado.
Minicaso hilado — Salim sitúa su primera herramienta de servidor
Salim, desarrollador junior en Argel, solo conoce el JavaScript del navegador. Su responsable le pide un pequeño servidor que responda a las peticiones de una página. Salim descubre que Node.js ejecuta su JavaScript del lado del servidor gracias al motor V8, que una lectura de archivo no bloquea el programa y que el bucle de eventos orquesta las devoluciones de llamada. Anota en una ficha «JS en todas partes, no bloqueante, bucle de eventos» y elige su primera prueba: mostrar un mensaje y simular una operación lenta sin bloquear.
Caso autónomo de esta sección: reaparece en el curso, el esquema, el script y el reto 48h de la sección 0.1.
1. JavaScript fuera del navegador
Node.js es un entorno de ejecución que ejecuta JavaScript fuera del navegador, sobre todo del lado del servidor. Combina el motor V8 (el rápido motor JavaScript de Chrome) con una biblioteca de acceso al sistema (archivos, red). Salim entiende la idea: conserva su lenguaje del front y lo usa para escribir un servidor, una API o una herramienta de línea de comandos. Es el « JavaScript full-stack »: un solo lenguaje para toda la web.
2. Asíncrono no bloqueante y bucle de eventos
La característica que define a Node es su modelo asíncrono no bloqueante de bucle de eventos (event loop). Muchas tareas de un servidor consisten en esperar: base de datos, archivo, red. En lugar de esperar pasivamente, Node registra una función a la que devolver la llamada (un callback) cuando esté listo y pasa enseguida a otra cosa. El bucle de eventos gira permanentemente: ejecuta el código disponible y dispara cada devolución de llamada en cuanto termina su operación. Salim retiene la imagen: tomar el siguiente pedido en lugar de holgazanear en la cocina.
3. Monohilo, fuerte en I/O, débil en cálculo pesado
Consecuencia: Node es monohilo para tu código pero gestiona miles de conexiones simultáneas, porque nunca se queda bloqueado esperando. Destaca en lo I/O-intensivo (servidores web, API, tiempo real) y es menos adecuado para lo CPU-intensivo (cálculos largos que monopolizarían el único hilo). Todo lo demás — callbacks, Promises, async/await — deriva de este modelo. Salim lo anotó al pie de su ficha en Argel: comprender el bucle de eventos antes que todo lo demás.
¿Lo sabía? El servidor que nunca holgazanea
No esperar nunca: registrar una devolución de llamada y continuar.
🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Bloqueante vs no bloqueante
console.log("Début");
setTimeout(() => {
console.log("Réponse de l'opération lente");
}, 100);
console.log("Fin (affichée avant la réponse)");
Lectura: Salim lanza este script con Node: « Fin » se muestra antes que « Réponse », prueba de que el programa no esperó.
Lección: el resultado llega más tarde vía la devolución de llamada; el hilo queda libre entre tanto.
Vocabulario de la sección
- Node.js
- Entorno de ejecución que ejecuta JavaScript fuera del navegador (del lado del servidor), basado en el motor V8 más una biblioteca de acceso al sistema.
Ejemplo sencillo: Salim lanza su primer servidor escrito en JavaScript con Node en Argel.
Lo que no es: un lenguaje distinto del JavaScript del navegador.
Reflejo: ante una necesidad de servidor o herramienta, preguntar « ¿puedo hacerlo en JS con Node? ».
- Motor V8
- Rápido motor JavaScript del navegador Chrome, que compila y ejecuta el JS; el corazón de Node.js.
Ejemplo sencillo: Salim sabe que su JS de servidor corre en el mismo motor que su JS de front.
Lo que no es: una biblioteca de red o un gestor de paquetes.
Reflejo: retener V8 = rapidez de ejecución, Node = V8 + acceso al sistema.
- Asíncrono no bloqueante
- Modelo donde una operación lenta no bloquea el programa: Node registra una devolución de llamada y continúa enseguida.
Ejemplo sencillo: Salim lanza una lectura de archivo y muestra lo siguiente sin esperar el final.
Lo que no es: esperar pasivamente el final de una operación antes de continuar.
Reflejo: prever siempre « qué hacer cuando esté listo » (la devolución de llamada).
- Bucle de eventos (event loop)
- Mecanismo central que orquesta la ejecución: lanza las operaciones lentas y devuelve las funciones cuando llegan los resultados.
Ejemplo sencillo: Salim visualiza el bucle que sirve cada respuesta en cuanto el archivo o la base responde.
Lo que no es: un hilo adicional por usuario.
Reflejo: pensar « el bucle devuelve », no « el programa espera ».
- I/O-intensivo vs CPU-intensivo
- I/O-intensivo: muchas esperas (servidores, API) donde Node destaca; CPU-intensivo: cálculos pesados que bloquearían el único hilo.
Ejemplo sencillo: Salim reserva Node para una API que lee una base, y descarta una codificación de vídeo masiva.
Lo que no es: dos nombres para lo mismo.
Reflejo: clasificar cada necesidad en I/O o CPU antes de elegir Node.
En la práctica — En la práctica — Situar Node.js y su modelo
- Retenga la naturaleza de Node: un entorno para ejecutar JavaScript FUERA del navegador (servidores, API, herramientas), gracias al motor V8.
- Identifique la ventaja « un solo lenguaje »: JavaScript en el front Y en el back (full-stack JS), como Salim en Argel.
- Comprenda el modelo no bloqueante: lance el script de ejemplo y constate que « Fin » llega antes que la respuesta.
- Sitúe los buenos usos: Node brilla para I/O (servidores web, API, tiempo real), menos para cálculos CPU pesados.
Script listo para decir — explicar Node a un colega (30 s)
« Node es nuestro JavaScript corriendo del lado del servidor gracias al motor V8. Cuando lee un archivo o consulta una base, no espera: registra una devolución de llamada y procesa lo siguiente, y el bucle de eventos devuelve cuando está listo. Un solo hilo gestiona un montón de peticiones, perfecto para nuestras API. »
Para decir con el script de ejemplo a la vista; mostrar el orden de visualización Début, Fin, Réponse.
Modelo copiar-pegar — observar lo no bloqueante
console.log("Salim lance la lecture");
setTimeout(() => {
console.log("Lecture terminée : Salim reprend ici");
}, 50);
console.log("Salim continue sans attendre");
Viniendo del front
Ya conoce el JS de navegador: concéntrese en lo que cambia (sin DOM, bucle de eventos, I/O) y lance el script de ejemplo para ver el orden real.
Principiante total
Sin base JS: relance el script tres veces cambiando el retardo (50, 200, 0) y anote el orden constante Début, continuación, respuesta — la intuición de lo no bloqueante.
Pareja en Argel
Salim hace adivinar el orden de visualización a su colega antes de ejecutar: quien se equivoque explica el bucle de eventos en la pizarra.
Elección de arquitectura
Antes de un proyecto: clasifique la necesidad en I/O (API, servidor, tiempo real → Node adecuado) o CPU pesada (cálculo masivo → a derivar a otro lado).
✓ Buenas prácticas
- Piense « un solo lenguaje » para el front y el back (full-stack JS).
- Reserve Node para tareas I/O (servidores, API, tiempo real).
- Comprenda el bucle de eventos antes que todo lo demás.
✗ Errores frecuentes
- Creer que monohilo = un solo usuario a la vez.
- Lanzar un gran cálculo CPU que bloquea el bucle de eventos.
- Olvidar que lo asíncrono (callbacks, Promises) deriva de este modelo.
Puntos clave
- Node.js ejecuta JavaScript FUERA del navegador (servidores, API, herramientas CLI) con el motor V8 — un SOLO lenguaje para el front Y el back.
- Modelo ASÍNCRONO NO BLOQUEANTE: las operaciones lentas no bloquean — Node registra una devolución de llamada y continúa.
- El BUCLE DE EVENTOS lo orquesta todo; Node es MONOHILO pero gestiona miles de conexiones simultáneas.
- Excelente para I/O (servidores web, API, tiempo real); menos adecuado para tareas CPU-intensivas.
Reto 48h — aplique mañana
Ejecute el script no bloqueante de Salim, cambie el retardo dos veces y explique en voz alta por qué « Fin » llega antes que la respuesta.
- Puedo explicar Node.js (JS de servidor con V8) con un ejemplo.
- He ejecutado el script y constatado el orden no bloqueante.
- Sé decir cuándo Node es adecuado (I/O) y cuándo no (CPU pesada).
Preguntas frecuentes
Node.js es monohilo: ¿cómo puede gestionar miles de usuarios a la vez?
Hay que distinguir « ejecutar código » de « esperar una operación lenta ». Un servidor pasa lo esencial de su tiempo esperando (base, archivo, red). Un servidor bloqueante dedicaría su hilo pasivamente. Node, no bloqueante, delega la operación al sistema, registra un callback y devuelve enseguida la mano: el hilo procesa la siguiente petición. El bucle de eventos ejecuta cada devolución en cuanto termina su operación. Como en un restaurante donde un buen camarero toma los pedidos en cadena y sirve cada plato cuando la cocina lo señala listo. Límite: un gran cálculo CPU monopoliza el hilo y lo bloquea todo.
¿Cuándo elegir Node.js y cuándo preferir otra tecnología?
Node brilla para: aplicaciones I/O-intensivas (API REST, back-ends que leen en base), el tiempo real (chat, notificaciones), equipos full-stack JS (un solo lenguaje), microservicios y herramientas. Es menos adecuado para tareas CPU-intensivas (cálculo científico, procesamiento masivo de imágenes, aprendizaje automático) que monopolizarían el único hilo — se prefieren entonces otras plataformas o se derivan esos cálculos a servicios especializados. La buena elección depende del problema (I/O vs CPU), del equipo y del ecosistema.
¿Qué define el modelo de Node.js?