articulo

Node.Js

a person holing a sticker in close up photography of node.js
Photo by RealToughCandy.com on Pexels.com

El origen

Antes de iniciar con Node.js, se debe hacer antesala a JS (JavaScript), a un par de décadas de su creación se utilizaba (en algunos sitios aún se utiliza), principalmente para la creación de scripts del lado del cliente. Dado que JavaScript sólo podía utilizarse dentro de la etiqueta <script>, los desarrolladores tenían que trabajar en múltiples lenguajes (html, css, php -generalmente) y marcos entre los componentes del front-end y del back-end. Hasta la llegada de Node.js.

Definiendo Node.js

Node.jse se entiende como entorno de ejecución que incluye todo lo necesario para ejecutar un programa escrito en JavaScript, orientado a eventos asíncronos, está diseñado para crear aplicaciones network escalables, permitiendo establecer y gestionar múltiples conexiones al mismo tiempo; esta característica, es la que hace que no exista los bloqueos.

Posee todo lo esencial para ejecutar código JavaScript del lado del servidor. Algo que facilita mucho el trabajo y el motivo por el que actualmente sea una de las herramientas de trabajo más usadas en desarrollo web.

Su entorno de ejecución de un solo hilo, de código abierto y multiplataforma. Su motor de ejecución de JavaScript V8, y utiliza una arquitectura de E/S basada en eventos y sin bloqueos, lo que la hace eficiente y adecuada para aplicaciones en tiempo real.

Arquitectura de Node.js

Imagen 1. Arquitectura de Node.js Fuente: tomada de https://www.oscarblancarteblog.com/

En la imagen 1. se puede apreciar como esta compuesto Node.js, en la primera capa se encuentra las librerías de node.js, estás se encargan de comunicarse entre las API de node y el motor V8. Una de sus librerías es Libuv escrita en c, que permite el procesamiento de las entradas y salidas asíncronas.

Está arquitectura, permite crear microservisios, promoviendo el desarrollo de pequeñas aplicaciones, donde si un servidor se muere, probablemente dejen de funcionar muchas aplicaciones, una de sus peculiaridades es suele ser extremadamente modular, esto quierie decir, que existe un pequeño módulo para cada cosa que se quiera hacer en nodejs; módulos para hacer uso del filesystem, otros para los request de html, otro para las conexiones a base de datos, entre otros. Permitiendo que las aplicaciones creadas en NodeJS, ejecuten solo los módulos estrictamente necesarios y ayudan en gran parte a crear aplicaciones mucho más ligeras.

¿Cómo funciona Node.js?

Imagen 2. Funcionamiento de node.js. Fuente: tumblr.com

Se tiene un flujo de trabajo particular, funcionando como un único proceso, sin crear nuevos hilos por cada petición, un hilo es un conjunto de instrucciones que debe realizar el servidor. Las operaciones de Node.js son sin bloqueo, cuando se envía una petición web al servidor, el ciclo de eventos de un solo hilo recoge las solicitudes y las envía a un hilo de trabajo (worker thread) para procesarlo. (vea imagen 1 – asincrónica).

El ciclo de eventos terminará todas las peticiones anteriores, actuales y pendientes, antes de ejecutar una función de devolución de llamada para enviar la respuesta del servidor al cliente. Esto puede tener varias peticiones simultaneas con tiempos de ejecución más rápidos y un menor uso de recursos.

Así en ves de bloquear el hilo y desperdiciar recursos de CPU esperando una respuesta, Node.js continúa trabajando en la siguiente tarea. De esta forma, se puede manejar una cantidad masiva de peticiones simultaneas.

¿Qué cambia node.js?

Una de sus principales características, es el procesamiento asíncrono. En otras palabras, es que cuando se requiere realizar una tarea secuencial, que requiera realizar los pasos 1, 2, 3, y en ese orden. Es necesario crear un callbacks, lo cual es básicamente que al terminar el paso 1, mande a llamar a la función correspondiente (el paso2) y al terminar éste, mande a llamar a otra función (el paso 3).

Esas series de llamadas o callbacks, son necesario anidar una gran cantidad de funciones para realizar una única operación, lo cual puede ser un verdadero dolor de cabeza al intentar seguir el código, además de ser muy verboso.

Esto pasa por que de manera nativa JavaScript funciona de manera asíncrona, siendo uno de los principales diferenciador de NodeJS, ya que al trabajar de esta manera ayuda a optimizar los recursos del servidor, pues no mantiene hilos bloqueados entre la ejecución de cada paso.

Ventajas de usar NodeJs

  • Intercambio enriquecedor: Al crear aplicaciones web efectivas, se vuelve notable más sencilla, ya que incluye NPM(Node Package Manager) con el repositorio de más de 50 mil paquetes. Los desarrolladores comparten, actualizan / reutilizan fácilmente el código con la ayuda de este NPM incorporado.
  • Base de código única y potente: Se trabaja sin tanto esfuerzo, tanto del lado del servidor como en el lado cliente con una codificación javascript. Esto no solo ayuda a ahorrar un tiempo valioso para los desarrolladores, sino que también ayuda a sincronizar diferentes datos automáticamente entre el lado cliente y servidor.
  • Secuencia de datos suave: Es una de las características más usadas por los desarrolladores cuando se trabaja con ficheros multimedia en tiempo real. Ya que asegura la disminución del tiempo de procesamiento.
  • Escalable: al poder procesar tantas conexiones de forma simultánea, es un entorno ideal para construir programas en red escalables con un alto nivel de rendimiento.
  • Rendimiento y eficacia: el que no se cuente con bloqueo de procesos y se utilice menos recursos lo convierte en un entorno rápido y eficaz.
  • OpenSource: es un software de código abierto, esto quiere decir que el código es ta disponible y no es necesario poseer ninguna licencia para su utilización.

Desventajas de NodeJS

  • Curva de aprendizaje: es un poco mas amplia con respeto a otros sistemas y requiere de más líneas de código, algo que puede resultar mucho más tedioso si estas acostumbrado a trabajar con otros tipos de ambientes.
  • Compatibilidad: no todos los planes de alojamiento web son compatibles con NodeJS, por lo que se requiere en ocaciones un host especializado.
  • Módulos en desarrollo: pese a que pose un sistema de administrador de paquetes (NPM), existen dependencias o módulos que pueden resultar escasos si se compraran con otros entornos.
  • Documentación: un buen de documentación aún se encuentra sin traducir.
  • Tipos dinámicos: JavaScript permite enviar como parámetro un objeto que no tiene definición, solo abres y cierras llaves {}, y dentro colocas lo que sea, lo que hace muy complicado saber que valor se puede enviar.
  • Callbacks: Suelen ser un dolor de cabeza, ya que tener funciones para cada paso es incómodo y hace muy complicado seguir el código.
  • Refactor: Debido a su tipeado débil y dinámico hacen que sea complicado para el IDE determinar como hacer una refactorización.
  • Librerías estándar: El detalle es que existe muchas librerías para lo mismo, haciendo complicado elegir entre una y otra. Sin dejar entre ver que cada una avanza a un ritmo separado en vez de unir fuerzas para una mejor versión.
  • Arquitectura: Todo se basa en funciones que son enviadas y exportadas de clases. No se suele implementar patrones arquitectónicos o de diseño.
  • API inestable: en cada actualización de NodeJS, suele romperse la compatibilidad hacia atrás, de versión en versión, lo que requiere cambios frecuentes en el código para mantener funcionando todo en las versiones actuales.
  • Multiples formas de programar: La falta de organización de código se puede considerar una gran desventaja, ya que cuando el equipo de desarrollo no esta muy familiarizado con la programación asíncrona o los patrones de diseño estándar, se obtiene código difícil de mantener.

¿Para qué suele usarse NodeJS?

Suele utilizarse para diferentes tipos de aplicaciones, algunos ejemplos son:

  • Aplicación de transmisión de datos (streaming).
  • Aplicaciones intensivas de datos en tiempo real.
  • Aplicaciones vinculada a la entrada y salida de datos.
  • Aplicaciones basadas en JSON:API.
  • Aplicaciones de página única.
  • Aplicaciones de tableros de control de sistemas.
  • API REST.

¿Quién usa NodeJS?

A continuación se muestra un listado de las empresas que usan NodeJS:

  • Godaddy.
  • Microsoft.
  • eBay.
  • General Electronic.
  • Paypal.
  • Uber.
  • NASA.
  • Netflix.
  • LinkedIn.
  • Medium.

Leave a Reply

Your email address will not be published. Required fields are marked *