Cuando trabajamos con JavaScript, lo primero que se nos viene a la mente es un navegador, aunque esta percepción ha cambiado, debido a que JavaScript ha dejado de ser un lenguaje de la web, para convertirse en un lenguaje de programación maduro, con impacto y con gran performance del lado del servidor. Esto sumado a su facilidad en cuanto a sintaxis, lo han hecho una herramienta muy interesante para la implementación de capas de backend.

Así es, JavaScript ha entrado en la competencia en el área de backend, gracias a que existen entornos de ejecución que proveen características interesantes que hacen atractivo a JavaScript para el desarrollo de APIs por ejemplo.

Conozcamos algunos de los protagonistas de JavaScript para Backend:

Node o NodeJS

Node nació en el año 2009, de la mano de Ryan Dalh, con la idea de poder ejecutar JavaScript fuera de los navegadores. Entre sus características más resaltantes está:

  • La ejecución no bloqueante: para las operaciones de entrada y salida (ejemplo archivos, base de datos o integraciones), Node no se queda esperando, sino que continúa el flujo y al tener respuesta ejecuta una función de callback, lo que permite a Node hacer múltiples operaciones al mismo tiempo.
  • Programación orientada a eventos, el cual es un paradigma de programación que permite ejecutar código a partir de eventos, como pueden ser acciones de usuarios o respuesta de ejecución de operaciones. Lo cual permite ejecutar múltiples acciones en simultáneo, ya que se crea un hilo separado por ejecución, el cual queda escuchando y reaccionando a los eventos.
  • Alto Rendimiento: Gracias al motor V8 de Google Chrome, Node.js puede ejecutar código JavaScript de forma eficiente y rápida.
  • Arquitectura Escalable: Node tiene la característica de que puede crecer en la medida que sea necesario, ya que por su gestión de eventos e hilos, sumado a su naturaleza asincrónica, es posible atender múltiples peticiones de forma simultáneas. Con la adición de recursos de hardware la aplicación escala sin ningún problema.
  • Gestión de Paquetes con NPM: Node.js tiene disponible lo que se denomina el repositorio de paquetes que agregan funciones, el cual conocemos como NPM o Node Package Manager.
  • Comunidad Activa: Una de las fortalezas más interesantes de un software es cuando tiene una comunidad activa importante, ¿por qué? Porque esto garantiza primero que el software es usado, luego que el software va a ser mejorado y que es probado continuamente. Node tiene una comunidad muy grande, por lo cual esto es una característica fundamental.
  • Multiplataforma: Node.js puede ser utilizado para desarrollar aplicaciones para diferentes plataformas, incluyendo servidores web, aplicaciones de escritorio y móviles.

Ahora comentemos algunos puntos que podrían ser mejorados en NodeJS:

  • Soporte nativo a Typescript. Para usar Typescript en Node es necesario hacer una serie de instalaciones y configuraciones que ya deberían venir realizadas disponibles al instalar.
  • Mejora en la gestión de paquetes adicionales. Actualmente, los modulos adicionales o lo que conocemos como node_modules, generan una carga en general excesiva y a veces innecesaria.

Con una estimativa de 30 millones de websites usando NodeJs como plataforma de backend, es por ahora el rey de los entornos de ejecución para JavaScript del lado del servidor.

Acá puedes apreciar algunas características de forma práctica de NodeJS

Deno

El segundo entorno de ejecución, también fue creado por Ryan Dalh, como has podido apreciar Deno es la inversión del nombre Node 😲. En su lanzamiento, en el año 2018, el creador indicó que Deno llegaba para corregir las cosas que no se realizaron correctamente en Node, es decir que Deno nació algunos puntos que Node aún no tiene o apenas lanzó recientemente. La primera versión estable oficial de Deno fue lanzada en 2020.

Deno está construido bajo Rush, un lenguaje que conocido por ser seguro y con alto performance. Al igual que NodeJS, Deno trabaja con el eventloop o el paradigma de programación en eventos, con ello el performance es similar, así como las aplicaciones que se pueden construir son escalables.

Características o diferenciales de Deno

  • Seguridad y permisos, Deno es estricto en cuanto al acceso a los recursos, es decir, debe indicarse de manera explícita el uso de lectura y escritura de archivos, acceso a la red o acceso a las variables de ambiente (enviroment), de esta forma, nuestro código actua de forma menos arriesgada, ya que es necesario liberar los permisos mediante opciones de ejecución.
  • Typescript nativo, desde que lo instalas, Deno tiene la capacidad de ejecutar código Typescript, sin necesidad de realizar alguna configuración. Es posible parametrizar la generación, sólo si queremos cambiar los ajustes por defecto.
  • Importación de paquetes eficiente, Deno no tiene node_modules, incluso si importas paquetes de la npm (que es una maravilla), la gestión de las importaciones se pueden hacer directamente de una url, por lo que no es necesario instalar previamente, al importar, si el paquete no está disponible será descargado.
  • DenoKV, es una base de datos que se encuentra en fase beta, pero que próximamente será parte del kernel estable de Deno, la cual nos permite sin necesidad de usar otra herramienta, hacer uso de una base de datos tipo Clave-Valor (NoSQL), lo cual facilita el trabajo en cuanto a manejar una capa de datos sencilla.
    Sistemas de permisiones

Acá podemos ver mediante ejemplos prácticos, las características o diferenciales que Deno posee:

Bun

El más reciente en torno de ejecución de JavaScript para Backend es Bun, creado en 2021 y lanzada su primera versión estable en 2024. Bun está construido en el lenguaje de bajo nivel Zig, con lo cual logra una eficiencia y una velocidad importante.

Características o diferenciales de Bun

  • Velocidad de ejecución o performance, ha llamado poderosamente la atención por la velocidad de ejecución, la cual es sorprendentemente mayor que la de Deno y Node.
  • Compatibilidad con paquetes de node (npm), Es compatible con la mayoría de paquetes de Node, por lo que es muy simple levantar en Bun una aplicación hecha en Node, ya que el grado compatibilidad es alto, por ejemplo paquetes como ExpressJS o creación de aplicaciones React con Vite funcionan sin ningún problema en Bun.
  • Typescript y JSX nativos, es posible implementar código TS sin ninguna configuración adicional, e incluso construir código JSX sin tener que agregar alguna libreria.

Bun aún está bastante joven, pero parece tener un futuro promisorio. En el siguiente video podrás observar algunos ejemplos de uso práctico de Bun.