NodeJS:¿Qué es?

NodeJS es un entorno de ejecución Javascript que descansa sobre el motor V8 desarrollado por Google.

Está pensado para generar la arquitectura servidor y nace con el objetivo de escapar del enfoque «sin estados» bajo el cual se ha regido el modelo clásico cliente – servidor. 

Recordemos que dicho modelo se caracteriza porque tanto cliente como servidor no mantienen información sobre el otro interlocutor: El primero realiza una petición al segundo, elabora una respuesta y se la devuelve.

post-node-js-post2.jpg

 

¿Cómo funciona? 

NodeJS se apoya en los websockets, y nos ofrece la posibilidad de abrir un canal de comunicación bilateral permanente, donde tanto el cliente como el servidor (a través de las conocidas como notificaciones push), puedan iniciar el diálogo. Todo ello además, empleando estándares como ECMAScript, HTML, CSS, etc. y por tanto, muy accesible para una gran comunidad de desarrolladores web familiarizados con ellos.

Otra de sus particularidades es que todas las peticiones son gestionadas bajo un mismo hilo, implementando lo que se conoce como bucle de eventos.

Si volvemos la mirada a los modelos clásicos, veremos cómo en ellos cada petición genera su propio hilo para ejecutarse bajo su propio contexto diferenciado. Todo ello conlleva un coste para generar cada contexto, así como una limitación, ya que existe un máximo de hilos.

En cambio, el bucle de eventos que nos permite encolar las peticiones para atenderlas posteriormente de forma asíncrona, escapa así de la limitación impuesta por el número de hilos.

Este funcionamiento lo convierte en una excelente elección para construir servicios donde se espera una alta demanda de peticiones o una gran escalabilidad. 

¿Solo una herramienta para generar servicios? 

Aunque esté claramente orientado a la arquitectura de servicios de alta demanda, no estamos limitados a ello.

NodeJS trae consigo un gestor de paquetes, NPM, desde el cual podremos descargar múltiples componentes desde repositorios online, similares a las gemas de Ruby o los Nugets de Microsoft. 

Entre todos estos contenidos, encontraremos ejemplos de diferentes funcionalidades, desde las más simples, como la gestión de fechas o el acceso a datos para diferentes sistemas (mongoDb, SQLServer, etc.), a otras más complejas como el generar directamente un servidor donde probar nuestra web (webpack-dev-server) o bien frameworks completos para, por ejemplo, desarrollo mobile (Ionic).

Todo ello gestionado desde línea de comandos y de forma sencilla:

– npm install -g ionic

– npm install webpack-dev-server

– etc

post-node-js-post1.jpg

¿Es pues el entorno adecuado para todos mis proyectos? 

Evidentemente, no hay ningún entorno perfecto, y en el caso de NodeJS algunas de las características que permiten sus fortalezas, dan pie también a debilidades.

Al trabajar con un solo hilo, y a pesar de implementar asincronía mediante el bucle de eventos, la realidad es que si empezamos a tratar con una petición pesada (algo de requerimientos de CPU), terminaremos penalizando al resto de peticiones.

La gestión de errores y excepciones también se convierte en un punto conflictivo ya que tenemos que tener cuidado de no provocar la salida del único hilo debido a alguna de ellas.

Bien es cierto que NodeJS proporciona mecanismos para evitar este supuesto, pero así es un punto que añadirá complejidad.

Por lo tanto…

Podemos considerar NodeJS como un entorno muy interesante y potente a la hora de optar por él para construir nuevos servicios, pero, como con cualquier otra de nuestras herramientas habituales, siempre debemos pensar primero el ámbito y el objetivo de los mismos, tanto en presente como en futuro.

¡Esperamos que este breve resumen os resulte interesante!

¡Nos vemos!

 Escrito por José Ramón Reche y David Villaluenga, Web developers en Bravent.