Qué es Node.js y porque ya deberías estar usándolo


En esta entrada vamos a ver brevemente qué es Node.js, una herramienta que en los últimos tiempos ha alcanzado una popularidad innegable, hasta convertirse en un componente indispensable en el desarrollo de aplicaciones Web.

No pretendemos hacer un análisis pormenorizado de las características, si no una descripción sencilla de sus principales características, los motivos de su éxito, y porque, si aún no lo habéis hecho, deberíais incluirla como herramienta estándar de vuestro repertorio.

Pero, antes de entrar en profundidad, indicar que Node.js es Open Source, cuenta con una extensa comunidad de usuarios y colaboradores, y que está disponible a través de su página web la página web https://nodejs.org/es/

¿Qué es Node.js?

Curiosamente, es bastante difícil explicar qué es Node.js de forma breve. No es algo tan sencillo como decir “un servidor web” o “un entorno de desarrollo” (y no es ninguno de esos, y un poco de ambos) o es un … “lo que sea”.

Y es que, como frecuentemente ocurre con las herramientas realmente buenas, Node.js sirve para muchas cosas. Veamos la definición que se da en Wikipedia:

Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google

No ha mejorado mucho la cosa ¿no? Bien, vamos a intentar arreglarlo y ver un resumen de algunas de las características de Node.js que han contribuido al éxito del que disfruta actualmente.

JavaScript en el lado del servidor

Es bien sabido que cuando comunicar dos dispositivos (ordenadores, móvil, tablet, IoT) frecuentemente existe una máquina que actúa como servidor, y uno o varios clientes.

Los clientes se comunican con el servidor, y este les devuelve una información, que puede ser desde una página web, datos almacenados en una base de datos, mensaje transmitido por otro cliente… a cualquier cosa.

Tradicionalmente hay lenguajes que se ejecutan en el servidor (PHP, ASP, JSP, Ruby…) y otros que se ejecutan en el cliente (en Web, JavaScript principalmente).

Precisamente una de las primeras características que llaman la atención de Node.js es que “voltea” esta situación, ejecutando Java Script en el lado del servidor.

No es la única tecnología del lado del servidor que funciona con JavaScript (ni siquiera fue el primero) pero sin duda es algo característico de Node.js.

Uno de los motivos para haber elegido JavaScript es que es un lenguaje ampliamente utilizado e íntimamente relacionado con el desarrollo Web. Por este motivo, la curva de aprendizaje resulta sencilla para un gran número de desarrolladores.

Por otro lado, las características de asincronía y diseño orientado a eventos de JavaScript lo hacían apropiado para el propósito principal de Node.js, que veremos justo a continuación.

Centrado en la escalabilidad

Node.js se diseño con la escalabilidad en mente, en particular, con la capacidad de soportar una gran cantidad de conexiones simultáneas a un servidor.

Muchas tecnologías en el lado del servidor ejecutan el entorno de cada una de las peticiones en un hilo independiente. Cuando el número de peticiones aumentan, aumentan los recursos consumidos en el servidor.

Además de los condicionantes para el rendimiento de un ordenador (RAM, CPU, velocidad de conexión), en un servidor el muchas veces el cuello de botella son los procesos de entradas y salidas (E/S).

Como alternativa, Node.js emplea un único hilo y un bucle de eventos asíncrono. Las nuevas peticiones son tratadas como eventos en este bucle. Este es el motivo por el que las características asíncronas y los eventos de JavaScript encajan tan bien en la filosofía de Node.js

Esto permite que Node.js sea capaz de gestionar múltiples conexiones y peticiones de forma muy eficiente, lo que lo hace apropiado para desarrollo y aplicaciones con un gran número de conexiones simultáneas.

Ejemplos son la elaboración de APIs, aplicaciones web con peticiones Ajax / Websockets, aplicaciones de mensajería push (RabbitMQ, ZeroMQ). Por supuesto, también ocupa un lugar destacado en el “Internet de las cosas” (IoT).

Por el contrario, en general, Node.js no resulta adecuado en aplicaciones que requieran un número reducido de conexiones con un gran consumo de recursos (aplicaciones de cálculo, acceso intensivo a datos, etc).

NPM Node Package Manager

Sin duda, otro de los motivos del éxito de NodeJS es su gestor de paquetes NPM(Node Package Manager). Este nos permite acceder a una enorme cantidad de librerías Open Source desarrolladas por la comunidad (y remarco, ENORME).

Entre los miles de packages que existen tenemos como destacables Express, React, Gulp, Socket.Io, Jade, Mongoose, Browserify, Forever, entre otras muchas. ¡Es todo un ecosistema que deberías conocer!

La lista completa de packages disponibles está en https://npmjs.org/.

Un estándar del desarrollo Web

¿Ya está, eso todo? ¡Pues no! Aunque Node.js no es ni un servidor web, ni un entorno de desarrollo, lo cierto es que la enorme comunidad y la enorme librería de paquetes Open Source disponibles, han hecho que se convierta en una de las herramientas estándar en del desarrollo Web.

Frecuentemente, los desarrolladores Web emplean Node.js, y las múltiples herramientas disponibles, para desarrollar aplicaciones Web de forma rápida. Ejecutar tareas, transcompilar, minifar recursos, sincronización de cambios con el navegador en tiempo real… son sólo algunas de las opciones que tenemos disponibles fácilmente en Node.js y que ahorran una enorme cantidad de tiempo.

Posteriormente, este desarrollo puede ser desplegado en el entorno de producción, bien sea usando el propio Node.js, un servidor Web como Apache o Tomcat, o un incluso introducirlo embebido en un dispositivo IoT.

Conclusión

Node .js es una de las herramientas que marcan tendencia hace años. Si realmente tienes interés en aplicaciones que se comuniquen a través de Internet (incluyendo desarrollo Web e IoT) ya deberías tenerlo instalado.

Sus características lo hacen interesante en sí mismo pero, unido a la enorme cantidad de herramientas y la gran comunidad existente, hace que sea obligado conocer su funcionamiento.

En próximas entradas profundizaremos en el uso de Node.js (pero ya dentro de la sección de programación) y aprenderemos a montar un servidor web, usar algunas de las muchas herramientas disponibles, e incluso conectarlo en aplicaciones de IoT.

Previous Comprobar la integridad de datos en Arduino con checksum
Next Tutorial básico Node.js: Cómo configurar un servidor HTTP