Aunque Node.js sigue siendo el runtime de JavaScript del lado del servidor más utilizado por un amplio margen, runtimes alternativos como Deno y Bun han acaparado la atención al intentar mejorar el concepto de Node.js.

Deno, el más popular de los dos runtimes más nuevos, aborda algunos problemas de seguridad inherentes a Node.js y ofrece una compatibilidad más completa con tecnologías como TypeScript y WebAssembly.

En este artículo, exploraremos los fundamentos de Deno, aprenderemos cómo se compara con Node.js y Bun, y haremos una demostración práctica de Deno para construir un sencillo servidor web HTTP.

¿Qué Es Deno?

A medida que los desarrolladores se familiarizaban con JavaScript, vieron su potencial para programar en máquinas locales. Así que crearon runtimes del lado del servidor, es decir, entornos que permiten ejecutar código JavaScript en máquinas sin utilizar un navegador.

Ryan Dahl desarrolló Node.js con este fin y, más tarde, creó Deno para solucionar algunos de los problemas que encontró en el diseño original de Node.js. Algunos defectos notables son su dependencia de un gestor de paquetes centralizado como npm, la falta de una biblioteca estándar y una configuración de seguridad laxa por defecto.

Algunas de las principales ventajas de Deno son las siguientes:

  • Seguridad por defecto – El usuario debe dar permiso explícitamente para que el código acceda a la red, al sistema de archivos o al entorno.
  • Compatibilidad integrada con TypeScript y WebAssembly – Ejecutar programas TypeScript y WebAssembly en Deno es tan fácil como ejecutar programas JavaScript. El runtime compila los lenguajes igual que lo hace con JavaScript.
  • Un gestor de paquetes descentralizado – En lugar de depender de un repositorio de paquetes como npm o el gestor de paquetes de Bun, Deno puede importar código directamente desde URLs. Esta capacidad significa que puedes cargar dependencias desde dondequiera que estén alojadas, incluido tu repositorio de GitHub, servidor o CDN. Deno también ofrece un servicio de alojamiento de scripts para facilitar aún más el acceso.
  • Cumplimiento de los estándares web – Deno pretende seguir las mismas API que los navegadores, lo que significa que el código escrito para navegadores es fácilmente traducible al tiempo de ejecución.

Las grandes empresas y los principales actores del sector, como Slack, Netlify y Supabase, han adoptado Deno, pero su adopción entre los desarrolladores web ha sido menos generalizada. Según la encuesta de Stack Overflow de 2022, sólo el 1,47% de los desarrolladores profesionales que respondieron a la encuesta utilizaban Deno, mientras que el 46,31% declararon utilizar Node.js.

¿Qué hace Deno?

Como cualquier runtime de JavaScript, Deno permite a los desarrolladores ejecutar JavaScript en el lado del servidor. Como resultado, puedes utilizar Deno para realizar una amplia variedad de tareas de programación.

Deno destaca sobre todo en tareas como el desarrollo de aplicaciones de servidor que responden a las peticiones de los usuarios basadas en la web. Por ejemplo, si estás creando una librería online, puedes utilizar Deno para crear una aplicación que tome información de una base de datos PostgreSQL, cree la página que el usuario desea ver y la envíe al navegador para su visualización.

También puedes utilizar Deno para tareas de programación de bajo nivel, como construir una herramienta de línea de comandos para gestionar tus tareas pendientes a través del terminal. En otras palabras, puedes utilizar Deno para lograr los mismos objetivos que conseguirías utilizando lenguajes como Python o Ruby.

Deno vs Node

Deno tiene la intención de ser una mejora respecto a Node.js, y cumple esa promesa en varias áreas clave. Deno mejora la seguridad permitiendo configuraciones de acceso más precisas para los distintos módulos de código. También se centra en el cumplimiento de la API estándar de la web, lo que permite a los desarrolladores utilizar el mismo código tanto en el navegador como en el servidor.

Para los equipos que trabajan en proyectos JavaScript del lado del servidor, Deno se ha convertido en una alternativa viable a Node. Y aunque su funcionalidad similar ha convencido a algunos desarrolladores de que Deno podría sustituir a Node.js, esta posibilidad es poco probable por algunas razones clave.

Node.js es el runtime de JavaScript más popular y ha acumulado un vasto ecosistema de paquetes preescritos y una comunidad de usuarios grande y activa. Estos recursos inestimables ayudan a que Node.js siga siendo un runtime extremadamente atractivo.

En cambio, Deno es nuevo: la versión 1.0 se publicó en mayo de 2020, por lo que relativamente pocos desarrolladores han tenido tiempo de jugar con él. Aprender una nueva herramienta alarga los plazos de desarrollo. Además, no está claro si Deno aportaría ventajas significativas a muchos proyectos sencillos.

Pero si estás creando una aplicación en un área en la que la seguridad es esencial, como las finanzas, las capacidades de seguridad de Deno podrían hacer que el cambio mereciera la pena.

Deno vs Bun

El antiguo ingeniero de Stripe Jarred Sumner lanzó por primera vez Bun en julio de 2022 para pruebas Beta. Bun es un runtime más experimental que Deno y, a diferencia de Deno, está diseñado para tener una amplia compatibilidad con Node.js.

Bun también presume de un rendimiento increíblemente rápido, que supera a Node.js y Deno. Sus características clave permiten estas capacidades

  • Un motor mejor – En lugar del motor V8 JavaScript y Web Assembly de Google, Bun utiliza el más rápido y eficiente JavaScriptCore como motor JavaScript subyacente.
  • Más control del código – Bun está escrito en Zig, un lenguaje de bajo nivel que proporciona mayor control que JavaScript sobre la ejecución del código.
  • Eficiencia afinada – El equipo que trabaja en Bun priorizó la creación de perfiles, la evaluación comparativa y la optimización durante el desarrollo para garantizar la eficiencia del código.

Bun es tan nuevo que hay relativamente poco soporte de la comunidad para ayudar a solucionar problemas. No obstante, Bun puede ser divertido para experimentar. Los equipos que necesiten específicamente un aumento del rendimiento pueden encontrar útil Bun para sus proyectos, pero el desarrollo web suele dar prioridad a otros factores distintos del rendimiento.

Primeros Pasos con Deno

Ahora que has aprendido un poco sobre Deno y cómo se compara con otros runtimes de JavaScript populares, es hora de ver cómo funciona. En esta sección, aprenderás a crear un servidor sencillo en Deno que responda a las peticiones HTTP con «Hello from the server!»

Instalación de Deno

Puedes instalar Deno en una máquina como un ejecutable binario utilizando estas instrucciones de instalación de la documentación oficial. En macOS, por ejemplo, puedes instalar Deno con el comando brew install deno.

Otra forma de empezar a trabajar con Deno es instalarlo como un paquete npm, así:

Crea una carpeta para tu proyecto (deno_example por ejemplo) y ejecuta el comando npm init dentro de ella. (Puedes aceptar todas las opciones por defecto sugeridas por init, ya que crea un archivo package.json básico.)

Tras inicializar tu aplicación, ejecuta npm install deno-bin para instalar el paquete binario Deno. Ahora puedes actualizar el archivo package.json para habilitar el lanzamiento de la aplicación con npm start. Añade la siguiente línea que empieza por "start": a las propiedades del objeto "scripts" en el archivo package.json por defecto:

"scripts": {
    "start": "deno run --allow-net app.ts",
    "test": "echo "Error: no test specified" && exit 1"
  },

Esta adición de script permite a Deno ejecutar el módulo app.ts con privilegios de red (--allow-net). Recuerda que, cuando trabajes con Deno, deberás permitir explícitamente el acceso a la red o al sistema de archivos.

Ahora, estás listo para crear el módulo app.ts, responsable de escuchar en un puerto y servir las peticiones de los usuarios.

Crear el módulo app.ts

Crear un servidor básico en Deno es extremadamente sencillo. En primer lugar, crea un archivo app.ts y pega el siguiente código:
<

import { serve } from "https://deno.land/[email protected]/http/server.ts";
serve((_req) => new Response("Hello from the server!"), { port: 8000 });

El código utiliza la función serve del server.ts Deno library almacenada en el sitio web oficial de Deno.land. Este código también proporciona un manejador de la función serve para las solicitudes entrantes. La función manejadora responde a cada solicitud con «Hello from the server !»

La función serve también toma parámetros opcionales, como el número de puerto en el que quieres servir. Aquí, el código de ejemplo utiliza estos parámetros para servir en el puerto 8000.

A continuación, inicia el servidor ejecutando npm start. Esto debería lanzar un servidor que escucha en localhost:8000 y responde a las peticiones con un saludo.

Servidor Deno en acción
Servidor Deno en acción

Si quieres ampliar el servidor a una API completa, probablemente necesitarás añadir conectividad con bases de datos. Eso es fácil de hacer, ya que la comunidad Deno ha creado controladores compatibles con bases de datos populares como MariaDB/MySQL, PostgreSQL, MongoDB, etc.

Resumen

Los runtimes van desde los más comunes y fiables hasta los más experimentales. Elegir el adecuado para tu proyecto depende de tu proyecto y de cómo quieres que tu runtime te ayude a conseguir tus objetivos.

Node.js funciona bien para la mayoría de los proyectos. Tiene un gran ecosistema y una gran comunidad que puede ayudarte con una amplia gama de escenarios de resolución de problemas.

Deno tiene la ventaja de una mayor seguridad y una mejor experiencia para el desarrollador. Al mismo tiempo, es más adecuado para equipos experimentados, de modo que sus ventajas compensan el tiempo y los costes laborales de aprender un runtime desconocido.

Por último, aunque Bun es demasiado experimental para la mayoría de los proyectos profesionales, es un runtime único y divertido para un proyecto personal o para ampliarlo.

En definitiva, Deno ofrece un equilibrio entre las ventajas de Node.js y las posibilidades experimentales de Bun. Aunque Node.js es una opción útil para la mayoría de los proyectos, Deno puede estar a la vanguardia de cómo evolucionará el desarrollo web en el futuro.

Mientras tanto, practica tus conocimientos de Deno regístrate en el nivel Hobby  del alojamiento de aplicaciones de Kinsta: codifica ahora y escala después.

Jeremy Holcombe Kinsta

Content & Marketing Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems ;).