Node.js: ¿Qué es y para que sirve NodeJS?

Tecnología Web, , Con 3 comentarios

Node.js es una librería y entorno de ejecución de E/S dirigida por eventos y por lo tanto asíncrona que se ejecuta sobre el intérprete de JavaScript creado por Google V8. Lo cierto es que está muy de moda aunque no es algo nuevo puesto que existen librerías como Twisted que hacen exactamente lo mismo pero si es cierto que es la primera basada en JavaScript y que tiene un gran rendimiento.

Nodejs.es

¿Qué es y para que sirve node.js?

JavaScript es un sólo un lenguaje de programación del lado del cliente que se ejecuta en el navegador, ¿verdad?. Ahora ya no. Node.js es una forma de ejecutar JavaScript en el servidor, además de mucho más.

Node.js es un entorno Javascript del lado del servidor, basado en eventos. Node ejecuta javascript utilizando el motor V8, desarrollado por Google para uso de su navegador Chrome. Aprovechando el motor V8 permite a Node proporciona un entorno de ejecución del lado del servidor que compila y ejecuta javascript a velocidades increíbles. El aumento de velocidad es importante debido a que V8 compila Javascript en código de máquina nativo, en lugar de interpretarlo o ejecutarlo como bytecode. Node es de código abierto, y se ejecuta en Mac OS X, Windows y Linux.

Pero ¿por qué javascript del lado del servidor?

Aunque Javascript tradicionalmente ha sido relegado a realizar tareas menores en el navegador, es actualmente un lenguaje de programación totalmente, tan capaz como cualquier otro lenguaje tradicional como C++, Ruby o Java. Ademas Javascript tiene la ventaja de poseer un excelente modelo de eventos, ideal para la programación asíncrona. Javascript también es un lenguaje omnipresente, conocido por millones de desarrolladores. Esto reduce la curva de aprendizaje de Node,js, ya que la mayoría de los desarrolladores no tendrán que aprender un nuevo lenguaje para empezar a construir aplicaciones usando Node.js.

Programación asíncrona, la manera más fácil

Además de la alta velocidad de ejecución de Javascript, la verdadera magia detrás de Node.js es algo que se llama Bucle de Eventos (Event Loop). Para escalar grandes volúmenes de clientes, todas las operaciones intensivas I/O en Node.js se llevan a cabo de forma asíncrona. El enfoque tradicional para generar código asíncrono es engorroso y crea un espacio en memoria no trivial para un gran número de clientes(cada cliente genera un hilo, y el uso de memoria de cada uno se suma). Para evitar esta ineficiencia,así como la dificultad conocida de las aplicaciones basadas en hilos, (programming threaded applications), Node.js mantiene un event loop que gestiona todas las operaciones asíncronas.

Cuando una aplicación Node.js necesita realizar una operación de bloqueo (operaciones I/O como trabajo con archivos …etc) envía una tarea asíncrona al event loop, junto con un callback, y luego continúa.

Node-JS

¿Qué problema resuelve Node?

La meta número uno declarada de Node es “proporcionar una manera fácil para construir programas de red escalables”.

¿Cuál es el problema con los programas de servidor actuales? Hagamos cuentas.En lenguajes como Java™ y PHP, cada conexión genera un nuevo hilo que potencialmente viene acompañado de 2 MB de memoria. En un sistema que tiene 8 GB de RAM, esto da un número máximo teórico de conexiones concurrentes de cerca de 4.000 usuarios. A medida que crece su base de clientes, si usted desea que su aplicación soporte más usuarios, necesitará agregar más y más servidores. Por todas estas razones, el cuello de botella en toda la arquitectura de aplicación Web (incluyendo el rendimiento del tráfico, la velocidad de procesador y la velocidad de memoria) era el número máximo de conexiones concurrentes que podía manejar un servidor.

Node resuelve este problema cambiando la forma en que se realiza una conexión con el servidor. En lugar de generar un nuevo hilo de OS para cada conexión (y de asignarle la memoria acompañante), cada conexión dispara una ejecución de evento dentro del proceso del motor de Node. Node también afirma que nunca se quedará en punto muerto, porque no se permiten bloqueos y porque no se bloquea directamente para llamados E/S.

Node afirma que un servidor que lo ejecute puede soportar decenas de miles de conexiones concurrentes.

Lo que Node definitivamente no es

Node es un programa de servidor. Sin embargo, el producto base de Node definitivamente No es como Apache o Tomcat.

Esos servidores básicamente son productos para servidor listos para instalar y que están listos para implementar aplicaciones instantáneamente. Usted podría tener un servidor estar listo y en operación en un minuto con estos productos. Node definitivamente no es esto. De forma similar a como Apache puede agregar un módulo PHP para permitir a los desarrolladores crear páginas Web dinámicas, y un módulo SSL para conexiones seguras, Node también tiene el concepto de módulos que se pueden agregar a su núcleo mismo. Literalmente hay cientos de módulos de los que se puede escoger con Node, y la comunidad es bastante activa en cuanto a producir, publicar y actualizar docenas de módulos por día.

NodeJS

¿Qué usos reales se le da a nodejs?

Es una herramienta genial para todo tipo de cosas. Aplicaciones web, aplicaciones en línea de comandos, scripts para administración de sistemas, todo tipo de aplicaciones de red, etc.

Es rápido, muy rápido. Esto es importante por varias razones:

  1. El desarrollo es más rápido.
  2. La ejecución de tests de unidad se puede hacer más rápido.
  3. Las aplicaciones son más rápidas y por tanto la experiencia de usuario es mejor.
  4. Menor coste de infraestrucutra (Linkedin pasó de tener 15 servidores a 4).

También destaca su flexibilidad. En otros entornos hay un servidor “monolítico” (apache, tomcat, etc.) y tu aplicación se “despliega” en él, y tienes unas estructuras de directorios y ficheros de configuración muy concretos. En nodejs tú lanzas el servidor web, y si quieres puedes lanzar varios, y si quieres puedes lanzar a la vez un servidor ftp, y los lanzas desde el directorio que quieras…

Desventajas de node.js

Como la mayoría de las nuevas tecnologías Node no es fácil de implementar en alojamientos existentes. En alojamientos compartidos habrá que ver si una aplicación de node.js puede funcionar; esto dependerá de la empresa de hosting. Si el alojamiento está en un VPS o servidor dedicado será más sencillo ya que se pueden ejecutar aplicaciones Nodejs sin problemas.Lo más fácil es usar un servicio escalable como Heroku, que es completamente gratuito para desarrollar una web y solo habrá que pagar cuando se necesiten más recursos.

Otras desventajas que se mencionan a menudo (pero que están solucionándose día a día son:

  • API Inestable:  La API de Node tiene la mala costumbre de cambiar en formas que rompen la compatibilidad hacia atrás de versión en versión, lo que requiere que apliques cambios frecuentes en tu código para mantener todo funcionando en las versiones mas actuales.
  • Falta de una Librería Estándar:  JavaScript es un lenguajes con un buen núcleo pero con una flaca librería estándar. Cosas que darías por hecho en otro lenguaje del lado del servidor simplemente no existen.
  • Falta de Librerías en General:  ¿Necesitas una interfaz de bases de datos madura? ¿Un ORM? ¿Una librería de procesamiento de imágenes? ¿Un analizador XML? Como JavaScript no sido popular en el lado del servidor todo esto es muy reciente, o no está probado o está en camino.
  • Muchas Formas de Programar:  La falta inherente de organización de código se puede considerar una gran desventaja. Se nota su efecto claramente cuando el equipo de desarrollo no está muy familiarizado con la programación asíncrona o los patrones de diseño estándar. Simplemente hay demasiadas formas de programar y de obtener código desparejo y difícil de mantener.
  • No está Probado lo Suficiente. Este punto puede ser susceptible a opiniones subjetivas debido a que es una cuestión bastante abierta. Mientras no tengamos grandes proyectos en producción por varios años, no podremos saber donde está el problema.

Lo más importante de node.js: La comunidad

Ademas de sus aplicaciones innatas, Node.js tiene una aplicaciones Node.js que ha escrito muchos módulos, excelente para agregar capacidades adicionales a las aplicaciones Node.js. Uno de los mas famosos es Socket.io, un módulo para gestionar las conexiones persistentes entre el cliente y el sevidor, permitiendo al servidor enviar actualizaciones en tiempo real a los clientes.(que es la magia que mantiene a nuestra plataforma de GPS y seguimiento en línea).

NodeJS Logo

Créditos imágenes: Shutterstock – lassedesignen, Shutterstock – ronstik, Shutterstock – Andrey Smirnov, NodeJS Logo