Aprenda Deno y vaya más allá de Node.js
Publicado: 2023-04-20Aunque Node.js sigue siendo el tiempo de ejecución de JavaScript del lado del servidor más utilizado por un amplio margen, los tiempos de ejecución alternativos como Deno y Bun han llamado la atención en su intento de mejorar el concepto de Node.js.
Deno, el más popular de los dos tiempos de ejecución más nuevos, aborda algunos problemas de seguridad inherentes a Node.js y proporciona un soporte más completo para tecnologías como TypeScript y WebAssembly.
En este artículo, explorará los conceptos básicos de Deno, aprenderá cómo se compara con Node.js y Bun, y seguirá una demostración práctica que usa Deno para construir un servidor web HTTP simple.
¿Qué es Deno?
A medida que los desarrolladores se familiarizaron con JavaScript, vieron su potencial para programar en máquinas locales. Entonces, crearon tiempos de ejecución del lado del servidor, entornos que permiten ejecutar código JavaScript en máquinas sin usar un navegador.
Ryan Dahl desarrolló Node.js para este propósito y, más tarde, creó Deno para abordar algunos de los problemas que encontró con el diseño original de Node.js. Algunas fallas notables incluyen su dependencia de un administrador de paquetes centralizado como npm, la falta de una biblioteca estándar y configuraciones de seguridad laxas por defecto.
Algunas de las principales ventajas de Deno incluyen las siguientes:
- S eguridad por defecto : el usuario debe otorgar permiso explícito para que el código acceda a la red, el sistema de archivos o el entorno.
- Compatibilidad integrada con TypeScript y WebAssembly : ejecutar programas TypeScript y WebAssembly en Deno es tan fácil como ejecutar programas JavaScript. El tiempo de ejecución compila los idiomas tal como lo hace con JavaScript.
- Un administrador de paquetes descentralizado : en lugar de depender de un repositorio de paquetes como npm o el administrador de paquetes de Bun, Deno puede importar código directamente desde las URL. Esta capacidad significa que puede cargar dependencias desde cualquier lugar donde estén alojadas, incluido su repositorio, servidor o CDN de GitHub. Deno también ofrece un servicio de alojamiento de secuencias de comandos para un acceso aún más fácil.
- Cumplimiento de los estándares web : Deno tiene como objetivo seguir las mismas API que los navegadores, lo que significa que el código escrito para los navegadores se puede traducir fácilmente al tiempo de ejecución.
Las grandes empresas y los principales actores de la industria, como Slack, Netlify y Supabase, han adoptado Deno, pero su adopción entre los desarrolladores web ha sido menos generalizada. Según la encuesta Stack Overflow de 2022, solo el 1,47 % de los desarrolladores profesionales que respondieron la encuesta usaban Deno, mientras que el 46,31 % informó que usaba Node.js.
¿Qué hace Deno?
Como cualquier tiempo de ejecución de JavaScript, Deno permite a los desarrolladores ejecutar JavaScript en el lado del servidor. Como resultado, puede usar Deno para realizar una amplia variedad de tareas de programación.
Deno sobresale en tareas como el desarrollo de aplicaciones de servidor que responden a solicitudes de usuarios basadas en la web. Por ejemplo, si está creando una librería en línea, puede usar 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 procesamiento.
También puede usar Deno para tareas de programación de nivel inferior, como crear una herramienta de línea de comandos para administrar sus tareas pendientes a través de la terminal. En otras palabras, puede usar Deno para lograr los mismos objetivos que lograría con lenguajes como Python o Ruby.
Deno vs Nodo
Deno pretende ser una mejora con respecto a Node.js y cumple esa promesa en varias áreas clave. Deno mejora la seguridad al permitir configuraciones de acceso más detalladas para diferentes módulos de código. También se centra en el cumplimiento de la API estándar 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 de JavaScript del lado del servidor, Deno se ha convertido en una alternativa viable a Node. Y aunque su funcionalidad similar convenció a algunos desarrolladores de que Deno podría reemplazar a Node.js, esta posibilidad es poco probable por algunas razones clave.
Node.js es el tiempo de ejecución de JavaScript más popular y acumuló un vasto ecosistema de paquetes preescritos y una comunidad de usuarios grande y activa. Estos valiosos recursos ayudan a Node.js a seguir siendo un tiempo de ejecución extremadamente atractivo.
Por el contrario, Deno es nuevo: la versión 1.0 se lanzó 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 traería beneficios significativos a muchos proyectos simples.
Pero si está creando una aplicación en un área donde la seguridad es esencial, como las finanzas, las capacidades de seguridad de Deno pueden hacer que el cambio valga la pena.
Deno contra bollo
El exingeniero de Stripe, Jarred Sumner, lanzó por primera vez Bun en julio de 2022 para pruebas Beta. Bun es un tiempo de ejecución más experimental que Deno y, a diferencia de Deno, está diseñado para tener una amplia compatibilidad con versiones anteriores de Node.js.
Bun también cuenta con un rendimiento increíblemente rápido, superando a Node.js y Deno. Las características clave permiten estas capacidades:
- Un mejor motor : en lugar del motor JavaScript V8 y Web Assembly de Google, Bun utiliza JavaScriptCore, más rápido y eficiente, como su motor JavaScript subyacente.
- Más control de código : Bun está escrito en Zig, un lenguaje de bajo nivel que proporciona un mayor control que JavaScript sobre la ejecución del código.
- Eficiencia ajustada con precisión : el equipo que trabajaba 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 apoyo de la comunidad para ayudar con la resolución de problemas. Sin embargo, Bun puede ser divertido para experimentar. Los equipos que requieren específicamente un aumento del rendimiento pueden encontrar Bun útil para sus proyectos, pero el desarrollo web con frecuencia prioriza otros factores además del rendimiento.
Primeros pasos con Deno
Ahora que ha aprendido un poco sobre Deno y cómo se compara con otros tiempos de ejecución de JavaScript populares, es hora de ver cómo funciona. En esta sección, aprenderá cómo crear un servidor simple en Deno que responda a las solicitudes HTTP con "¡Hola desde el servidor!"
Instalación de Deno
Puede 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, puede instalar Deno con el comando brew install deno
.
Otra forma de empezar a trabajar con Deno es instalarlo como un paquete npm, así:
Cree una carpeta para su proyecto (quizás deno_example ) y ejecute el comando npm init
dentro de ella. (Puede aceptar todas las opciones predeterminadas sugeridas por init
ya que crea un archivo package.json básico).
Después de inicializar su aplicación, ejecute npm install deno-bin
para instalar el paquete binario de Deno. Ahora puede actualizar el archivo package.json para habilitar el inicio de la aplicación con npm start
. Agregue la línea en negrita a continuación a la propiedad del objeto "scripts" en el archivo predeterminado package.json:
"scripts": { "start": "deno run --allow-net app.ts", "test": "echo \"Error: no test specified\" && exit 1" },
Esta adición de secuencia de comandos permite a Deno ejecutar el módulo app.ts con privilegios de red ( --allow-net
). Recuerde, cuando trabaje con Deno, debe permitir explícitamente el acceso a una red o sistema de archivos.
Ahora, está listo para crear el módulo app.ts , responsable de escuchar en un puerto y atender las solicitudes de los usuarios.
Creación del módulo App.ts
Crear un servidor básico en Deno es extremadamente simple. Primero, cree un archivo app.ts y pegue 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
de la server.ts Deno library
almacenada en el sitio web oficial de Deno.land. Este código también proporciona un controlador de función serve
para las solicitudes entrantes. La función del controlador responde a cada solicitud con "¡Hola desde el servidor!"
La función serve
también toma parámetros opcionales, como el número de puerto en el que desea servir. Aquí, el ejemplo de código usa estos parámetros para servir en el puerto 8000.
A continuación, inicie el servidor ejecutando npm start
. Esto debería iniciar un servidor que escuche en localhost:8000
y responda a las solicitudes con un saludo.
Si desea extender el servidor a una API completa, probablemente necesitará agregar conectividad a la base de datos. Eso es fácil de hacer ya que la comunidad de Deno ha creado controladores compatibles con bases de datos populares como MariaDB/MySQL, PostgreSQL, MongoDB y más.
Resumen
Los tiempos de ejecución van desde comunes y confiables hasta muy experimentales. Elegir el adecuado para su proyecto depende de su proyecto y de cómo desea que su tiempo de ejecución lo ayude a lograr sus objetivos.
Node.js funciona bien para la mayoría de los proyectos. Tiene un gran ecosistema y una gran comunidad que puede ayudar con una amplia gama de escenarios de solución de problemas.
Deno tiene el beneficio de seguridad adicional y una mejor experiencia de desarrollador. Al mismo tiempo, es más adecuado para equipos experimentados, de modo que sus beneficios superen el tiempo y los costos de mano de obra de aprender un tiempo de ejecución desconocido.
Finalmente, aunque Bun es demasiado experimental para la mayoría de los proyectos profesionales, es un tiempo de ejecución único y divertido para un proyecto personal o para expandirlo.
Con todo, Deno ofrece equilibrio entre los beneficios de Node.js y las posibilidades experimentales de Bun. Si bien 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, practique sus habilidades de Deno registrándose en el nivel Hobby de alojamiento de aplicaciones de Kinsta: codificación ahora y escalamiento más adelante.