Explicamos lo que es Node.js para técnicos y para principiantes

Node.js

A continuación, explicamos una breve introducción a Node.js. Se trata de ofrecer las principales características de este runtime environment, tanto para entender por qué los desarrolladores están eligiendo Node.js para sus desarrollos, como para aquellos que se estén planteando aprenderlo y puedan tener en cuenta sus puntos fuertes y sus desventajas.

¿Qué es Node.js?

Primero, nos gustaría ofrecer una definición sencilla para que todo el mundo, independientemente de si su bagaje es técnico o no, lo pueda entender:

Node.js es un entorno de código abierto multiplataforma que ejecuta código JavaScript fuera de un navegador.

El potencial de Node.js, es que permite a los desarrolladores utilizar JavaScript para desarrollar en el lado del servidor. De esta forma se consigue contenido dinámico de páginas web antes de que la página se envíe al navegador web del usuario.

En consecuencia, Node.js unifica el desarrollo de aplicaciones web en torno a un único lenguaje de programación, en lugar de lenguajes diferentes para los scripts del lado del servidor y del lado del cliente.

Por el contrario, también nos gustaría ofrecer un acercamiento más técnico para los más especializados:

Node.js es un entorno de ejecución de JavaScript que está orientado a eventos asíncronos, y está diseñado para construir aplicaciones en red escalables. Además, Node.js es open-source y multiplataforma. Node.js ejecuta el motor V8 JavaScript, el núcleo de Google Chrome, fuera del navegador, esto permite a Node.js ser muy eficiente.

La programación asincrónica se refiere a un estilo de estructurar un programa mediante el cual una llamada a alguna unidad de funcionalidad desencadena una acción que puede continuar fuera del flujo continuo del programa.

A pesar de que esto lo veremos más adelante, Node.js es muy fácil de integrar con http, lo que hace que su versatilidad sea aún mayor y lo hace perfecto para montar aplicaciones web que tengan mucha entrada/salida o aplicaciones de carácter similar.

A modo de curiosidad, Node.js es uno de los runtime que más ha crecido en popularidad en los últimos años.

Sobre Npm, require y node_modules

Npm es el gestor de paquetes de node (Node Package Manager). Con esta herramienta es muy sencillo instalar, actualizar y desinstalar librerías para el proyecto (que se almacenan en la carpeta node_modules) y pueden ser accesibles con require.

  • Npm es el gestor de paquetes estándar de Node.js
  • Administra todos los módulos que puedes descargar para añadir funcionalidad en los proyectos
  • Sintaxis: npm install <package-name>
  • Para importar los paquetes descargados desde el código: require(‘package-name’)

Ventajas

  • Menor tiempo de ejecución: El tiempo de ejecución es menor gracias a la asincronía que anteriormente explicábamos, ya que no se pierde tiempo ejecutando el código o una línea detrás de otra, sino que va ejecutando lo que puede en cualquier momento
  • Automatización de procesos más fácil, lo que se traduce en rapidez y eficiencia
  • Facilidad para hacer tests unitarios (mocha, tape). Esto genera un desarrollo de mayor calidad y validación
  • Escalabilidad. Algo que cobra especial importancia para proyectos de medio y gran tamaño

Sobre el comportamiento no bloqueante:

  • Una aplicación Node.js se ejecuta en un solo proceso, sin crear un nuevo hilo para cada solicitud
  • Node proporciona un conjunto de primitivas de E/S asíncronas en su biblioteca estándar que evitan que el código JavaScript se bloquee y, en general, las bibliotecas en Node.js se escriben utilizando paradigmas de no bloqueo. Esto supone que el comportamiento de bloqueo sea la excepción en lugar de la norma
  • Cuando Node.js necesita realizar una operación de E/S, como por ejemplo, leer desde la red, acceder a una base de datos o al sistema de archivos, en lugar de bloquear el hilo y perder los ciclos de la CPU en espera, Node.js reanudará las operaciones cuando vuelva la respuesta
  • A partir de las últimas versiones de Node es posible crear y utilizar threads para programación multihilo (módulo worker_threads)

Desventajas

  • Requiere un cambio de mentalidad respecto a lenguajes estructurados tradicionales debido a la asincronía que explicábamos anteriormente, lo que complica un poco su aprendizaje
  • Potencia de cálculo: Node.js ofrece menor potencia de cálculo que otros lenguajes, como Java
  • Node conlleva problemas derivados de JS, como la representación de float
  • Inestabilidad de la API. La API sigue cambiando a intervalos frecuentes y no permanece estable. Frecuentemente una nueva API tiene varios cambios incompatibles con versiones anteriores
  • Poca madurez de algunas herramientas y módulos de npm
  • Existe una alta demanda y baja oferta de profesionales especializados en Node js, ya que no todos los desarrolladores JS son expertos en Node js

Node.js & Deno

Ryan Dahl, creador de Node, ha estado durante los últimos años desarrollando Deno, un nuevo entorno de ejecución para JavaScript destinado a arreglar todos los problemas inherentes de Node.

Está centrado en mejorar aspectos como la seguridad (permisos), los módulos (para evitar depender exclusivamente de npm) y las dependencias, entre otros.

¿Te ha gustado? Quizá te interese este artículo sobre Rust