Node.js

Qué es Node.js y para qué Sirve

Node.js

Node.js es un entorno de ejecución de JavaScript que ha aportado mucho a este lenguaje, dándole por primera vez la posibilidad de actuar del lado del servidor. Convirtiendo así a JavaScript en un lenguaje que abarca tanto el Frontend como Backend, lo que se conoce también como Full Stack.

Este es un entorno extremadamente popular hoy en día. Tanto, que compañías tan grandes como PayPal, la NASA y Netflix lo utilizan.

Destaca sobretodo por su modelo asíncrono y orientado a eventos, con el cual no tendremos necesidad de recargar la página para ver las actualizaciones de esta. Node.js es ideal para crear funciones a tiempo real como podrían ser un chat o un sistema de notificaciones en vivo.

¿Qué es Node.js?

Esta es la definición que dan en la propia web oficial de node.js:

Node.js® es un entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome. Node.js usa un modelo de operaciones E/S sin bloqueo y orientado a eventos, que lo hace liviano y eficiente. El ecosistema de paquetes de Node.js, npm, es el ecosistema mas grande de librerías de código abierto en el mundo.

Así que basicamente es un entorno de ejecución para Javascript, pero voy a intentar explicar con más detalle todos los puntos importantes de esta definición.

Por lo tanto, ten en cuenta que Node.js no es una librería ni tampoco es un Framework de JavaScript.

¿Qué es un Entorno de Ejecución?

Pues según la wikipedia, en este artículo:

Un entorno de ejecución (runtime environment en inglés) es un estado de máquina virtual que suministra servicios para los procesos de un programa de computadora que se está ejecutando. Puede pertenecer al mismo sistema operativo, o ser creado por el software del programa en ejecución.

Es decir, que node.js lo que hace es proporcionar servicios extra a JavaScript mientras este se está ejecutando.

Características de Node.js

Estas son las principales características de Node.js:

Construido con v8

Node.js se ha construído con V8, que es el entorno de ejecución para Javascript que utiliza Google Chrome.

V8 se ha desarrollado con C++ y es un software libre, es decir, que todo el mundo puede contribuir a mejorar su desarrollo  y que por lo tanto, está en constante revisión y en proceso de mejora por parte de una enorme comunidad.

Esto es una gran ventaja para Node.js, ya que v8 es una herramienta tremendamente potente y eficiente.

JavaScript en servidor/backend

JavaScript

JavaScript siempre ha sido conocido por ser el lenguaje de programación web que actúa en el lado del cliente (Frontend), nunca ha podido interactuar por el lado del servidor (Backend). Para esta labor siempre se han encargado otros lenguajes como por ejemplo PHP, Python o Ruby.

Pero todo esto ha cambiado con Node.js. Ahora JavaScript puede actuar por los dos lados, tanto para el lado del cliente como para el del servidor, pudiendo así encargarse de todo por si mismo.

¿Quieres conocer mejor lo que es JavaScript?

Modelo asíncrono orientado a eventos

Estamos muy acostumbrados a que cuando se realiza algún cambio en la página para visualizarlo tenemos que recargarla.

Por ejemplo; si yo cambiase el texto de este post mientras tu estás leyendo, hasta que tú no recargases la página no serías capaz de ver los cambios, y por supuesto, nada te avisaría de ello.

Node.js funciona en tiempo real y por ello, cada vez que ocurra algún evento este será modificado inmediatamente de forma que el cliente aun estando dentro de la página vea el cambio.

Esta es de hecho una de las características principales y uno de los motivos por los cuales Node.js se utiliza tanto hoy en día. Se podría considerar como la programación del futuro, una programación más eficiente, sólida e interactiva.

E/S sin Bloqueos

JavaScript siempre ha tenido el problema de ser secuencial, pero las cosas han cambiado con Node.js.

Pero… ¿Qué significa esto de Entrada y Salida sin Bloqueos? Básicamente que las operaciones que deba realizar el entorno se pueden hacer en modo multi-tarea. Es decir, que si hay que realizar 3 procesos por ejemplo, estos tres se realizaran a la vez en lugar de ir de uno en uno.

¿Y esto sirve para algo? ¡Pues claro! Mejorará muchísimo la velocidad de procesado, tu imagínate que tienes que realizar en una función 5 procesos y que cada uno tarda 1 segundo en procesarse. Si los procesos se realizaran de uno en uno, nos llevaría un total de 5 segundos en realizarlos todos, pero en su lugar tardará solo 1 segundo, ya que los cinco se procesarán simultáneamente.

Esto obviamente tiene sus límites, pero sin ninguna duda convierte a Node.js en un entorno muy eficiente.

Trabaja con BBDD NoSQL

Cuando nos referimos a una BBDD NoSQL nos referimos a una base de datos que no trabaja, como suele ser lo común, con el lenguaje SQL.

Node.js trabaja con MongoDB, que no es la típica base de datos basada en tablas. Es una base de datos documental.

Al principio cuesta un poco imaginarse una BBDD que no utilice tablas, filas, columnas y ese tipo de cosas; pero con el tiempo te acostumbras. ¿Que cómo funciona MongoDB entonces? Pues básicamente con JSON, en realidad con BSON (que es JSON en binario), pero de eso no debes preocuparte, ya que será la propia MongoDB la que pase de JSON a BSON.

Todos los datos serán cadenas de JSON y esto tiene tanto ventajas como inconvenientes, pero de eso hablaremos en otro post. (#ToDo)

Incluye npm

Npm es un gestor de paquetes que viene incluido con la instalación de Node.js y que trae consigo multitud de herramientas útiles. De hecho, es el mayor gestor de paquetes que existe, así que imagínate su potencial.

Son montones y montones de herramientas muy interesantes que Node.js no trae de serie, podría poner muchos ejemplos, pero algunos muy comunes serían Nodemon o TypeScript.

¿Para qué sirve Node.js?

Realmente podemos realizar cualquier tipo de proyecto o aplicación web con node.js de forma muy similar a lo que podríamos hacer por ejemplo con PHP, Pero… ¿En qué aspectos destaca este?

Chats

Debido a la naturaleza asíncrona y orientada a eventos de node.js, este es ideal para desarrollar chats. Si lo piensas estas son las características que necesita un chat para ser funcional.

Tanto el servidor como el cliente estarán siempre comunicados en tiempo real entre sí y por supuesto, sin ninguna necesidad de actualizar la página. Imaginaros tener que actualizar la página cada vez que alguien escribe un nuevo texto en un chat para poder visualizarlo, ¡Sería horrible!

Redes Sociales

Vivimos en un mundo dominado por las Redes Sociales, cada día hay más y más y son millones las personas las que las utilizan a diario. Nunca sabes si tu puedes crear la próxima Red Social exitosa, ya sea mundialmente o en su nicho y por supuesto es una muy buena idea crearla con Node.js.

Una Red Social debe funcionar a tiempo real y en ese aspecto Node.js es el rey.

Foros

Con Node.js también se podría crear un foro estupendo y muy por encima de los que estamos acostumbrados hoy en día.

Imagínate un foro donde las nuevas publicaciones se actualicen en tiempo real. Estás en un hilo popular leyendo un tema que te interesa y estás leyendo el último aporte del foro y de repente… ¡Pop! Te carga en tiempo real un nuevo aporte por parte de un usuario. ¿Sería fantástico no?

¡Cualquier cosa!

Esto son algunos ejemplos de las cosas que podrías hacer, sobretodo las más interesantes dado el poder de Node.js. Pero por poder, puedes hacer lo que quieras. Desde una página sencilla hasta a un monstruo como Netflix, por funcionalidades no será, el límite lo pones tu.

¡Y eso es todo! Espero que con este post ahora entiendas un poco mejor lo que es Node.js y lo que este puede aportarle a tu aplicación o página web. Si todavía no te has puesto con él, te lo recomiendo enormemente y en ese caso te recomiendo que sigas este blog, que iré añadiendo más contenido sobre Node.js.

¿Qué opinas tú de Node.js? ¿Tienes alguna duda? ¿Quieres aportar algo? ¿Crees que alguno de los conceptos podrían explicarse mejor? ¡En ese caso no dudes en dejar tu comentario!

Give a Comment