miércoles, 30 de septiembre de 2015

Node.js: JavaScript más allá del front-end.


No hay duda que JavaScript es uno de los lenguajes más importantes a la hora de construir una aplicación web. Desde hace tiempo, JS es el elegido para la parte de front-end. Por otro lado, en la parte oculta o back-end, tradicionalmente tenemos varias opciones como PHP, Ruby, Python, etc… Pero un día todo esto cambió y JS cruzó el puente hacia el lado del servidor.

En 2009 Ryan Dahl creó Node.js, y su evolución está apadrinada por la empresa Joyent. La plataforma está basada en C++ y JavaScript.

Node.js es un entorno de programación que te permite correr código JavaScript en el back-end, fuera del browser. Gracias a Node.js podremos crear nuestros propios servidores web y gestionar su comportamiento. JavaScript ya no vive solo en el browser y da el salto al servidor.

Para que JavaScript pueda ejecutarse en el servidor, el lenguaje necesita ser interpretado. Para ello, esta plataforma hace uso del motor V8 de JavaScript, el mismo que usa Google en el navegador Chrome.

Con Node.js no tienes que programar todo de cero, ya que viene con muchos módulos útiles. Esto quiere decir que Node.js es en realidad dos cosas: un entorno de ejecución y una librería muy completa.

Node.js es ideal para aplicaciones en tiempo real que hagan uso de datos intensivos y que se ejecuten a través de dispositivos distribuidos. Utiliza un modelo asíncrono orientado a eventos. Esto quiere decir, que al igual que sucede con AJAX, todo transcurre en tiempo real. Cuando se produce el evento, el servidor envía la respuesta sin que sea necesario recargar la página. Tradicionalmente, el cliente enviaba una petición al servidor y este respondía, pero para que esta fuera visible, la página debía recargarse. Ahora la comunicación es bidireccional y cuando sucede un evento predefinido, el servidor (que puede enviar mensajes en cualquier momento) envía la respuesta. La magia de Node.js permite que la comunicación se haga de manera recíproca y todo sucede de forma fluida.

Una aplicación para Node.js se programa sobre un solo hilo que siempre se encuentra en ejecución (como si tuviéramos un main con un bucle infinito) y debido a esta arquitectura sólo puede usar una CPU. Para poder trabajar de una forma óptima, Node.js  le pasa todos los trabajos que le llegan a  un pool de threads (construido con la librería libuv.).

Esto es comparable a la cocina de un gran restaurante en la hora de máxima afluencia. Cuando un cliente pide un plato, (emite un evento) el camarero (que es el thread ) llega con las comandas (peticiones) a la cocina (pool de threads) y cada cocinero se encarga de hacer el plato que le toque. Cada vez que un cocinero termina su plato avisará al camarero y el plato se entregará al cliente.







    Ventajas de uso:

  • Es fácil de usar, sobre todo si tienes experiencia con JavaScript.
  • Es software libre. Está liberado bajo la licencia MIT y tiene una comunidad enorme documentando, haciendo tutoriales y creando nuevos módulos.
  • Se puede descargar en forma de código fuente desde GitHub o instalador para Windows o Mac.
  •  Rapidez, flexibilidad
  • Ahorro en infraestructura. Cuando LinkedIn migró todo su back-end desde Ruby on Rails hacia Node.js redujo de 30 a 3 su número de servidores.
  • Comodidad. Tanto la parte de back-end como la de front-end se programan en el mismo lenguaje.
  • Con Node.js puedes utilizar JavaScript como lenguaje de scripting en tu consola.
  •  Al estar basado en eventos, toda la filosofía asíncrona que ya se usa con AJAX en el cliente la podemos pasar al servidor.


    Desventajas:

  • Gran cantidad de librerías  disponibles
  • A Node.js no le sientan bien los cambios en su API. Es posible que las nuevas versiones te obliguen a hacer cambios constantes en tu código para mantener la funcionalidad.
  • Aunque dispone de gran variedad de librerías, todavía no son suficientes.


De todas formas, estos inconvenientes se van solucionando poco a poco y Node.js cuenta con un futuro prometedor. 
La evolución de Node.js ha sido muy positiva y con el tiempo se ha convertido en una plataforma muy estable. Empresas consolidadas como Yahoo, Microsoft, LinkedIn o eBay son garantía de ello. Por algo será... digo yo.



Enlaces:





El libro para principiantes de Node.js: http://www.nodebeginner.org/index-es.html