¿Qué es Node.js?
El sitio oficial de Node.js explica: “Node.js un entorno de ejecución para JavaScript construido con V8, motor de JavaScript de Chrome”. De esta definición probablemente te surjan aún más preguntas:
- ¿Qué es un “entorno de ejecución”?
- ¿Qué es un motor de Javascript?
- ¿Qué es V8?
¿Qué es un entorno de ejecución?
Un entorno de ejecución es el entorno en el cual un programa es ejecutado. Por ejemplo, como seres humanos, nosotros necesitamos un entorno, un ambiente que nos rodea y nos mantiene vivos. De manera similar, un programa de software necesita un entorno, la infraestructura de hardware y software que apoya el funcionamiento del código en tiempo real.
Entorno de ejecución es “runtime environment” en inglés, y en ocasiones, es abreviado como RTE.
¿Qué es un motor de Javascript?
Cada navegador Web tiene un motor de Javascript. Este motor es un programa que toma el código de Javascript y lo convierte en código que la computadora puede entender (machine code).
Por ejemplo, Chrome usa un motor llamado V8. Firefox usa un motor llamado SpiderMonkey. El navegador provee el entorno de ejecución para el código de Javascript.
¿Por qué se creó Node.js?
Para entender por qué surgió la necesidad de un sistema como Node.js, hay que pensar en cómo se usaba Javascript hace unos años atrás. Por lo general, solo podía utilizarse Javascript para programar aplicaciones que se utilizaban dentro del navegador de internet.
Hasta el año 2009 la única manera de ejecutar código Javascript era dentro del navegador. En este año, Ryan Dahl, tuvo una idea: “¿qué tal si pudiera ejecutar código Javascript no solo en el navegador, sino fuera de él?”.
Así que Ryan tomó V8, lo colocó dentro de un programa de C++, y llamó a ese programa Node.js
Ventajas de Node.js
Similar a un navegador, Node es un entorno de ejecución para Javascript. Además, Node nos provee módulos que nos permite hacer cosas que Javascript no puede hacer dentro del navegador. Por ejemplo,
- es posible acceder a archivos del sistema
- podemos crear un servidor que escucha peticiones
Entonces, en esencia, Node es un programa que incluye el motor de Javascript V8 y módulos adicionales que no están disponibles en el navegador Web. Chrome y Node comparten el mismo motor de Javascript pero proveen un entorno de ejecución distinto.
Características importantes de Node.js
Dos características notables de Node.js son las siguientes:
- está orientado a eventos asíncronos y
- está diseñado para construir aplicaciones en red escalables
¿Qué es asíncrono?
En este contexto, asíncrono quiere decir que el código permite que el programa solicite una tarea, y sin detenerse a esperar que esta primera tarea se haya completado, puede solicitar otra tarea. La idea es no bloquear el hilo de ejecución.
Imagina que vas a un restaurante, el mesero se acerca a tu mesa, toma tu orden y se la entrega a la cocina. Mientras el chef prepara tu platillo, el mesero toma la orden de otra mesa. El mesero puede tomar órdenes de más de una mesa. No tiene que esperar a que el chef termine de preparar un platillo antes de tomar la orden de la siguiente mesa.
Las aplicaciones de Node.js funcionan de manera similar. El mesero es como un hilo de ejecución (thread) que se le asigna encargarse de peticiones. Un solo hilo de ejecución puede encargarse de varias peticiones.
Por ejemplo, supongamos que a un hilo de ejecución en Node se le pide consultar la base de datos. El hilo de ejecución envía la petición a la base de datos, mientras la base de datos está ejecutando la consulta, ese hilo no espera a que la base de datos provea el resultado, sino se utiliza para hacer otra petición.
¿Para qué tipo de proyectos se debería usar Node.js?
Node.js se utiliza principalmente para aplicaciones y servidores no bloqueantes y basados en eventos. La arquitectura de Node lo hace ideal para programar aplicaciones de tiempo real (real-time), como una aplicación de chat o para desarrollar back-ends de aplicaciones Web y APIs.
Te invito a ver el video que publiqué en YouTube ¿Qué es Node.js? Explicación sencilla donde explico detalles adicionales sobre este tema.