¿Qué es Deno y reemplazará a Node.js?



Buen día. Les presento la traducción del artículo "Deno vs. Node.js - Aquí están las diferencias más importantes ” por Louis Petrik.

¿Es Deno el nuevo Node.js? O simplemente una buena alternativa? En este artículo intentaré responder estas preguntas.

Historia de Deno


Deno y Node.js son el trabajo de una persona: Ryan Dahl.

Dahl ha estado trabajando en Node.js desde 2009, pero después de unos años dejó el equipo. En 2018, hizo una presentación, "10 cosas de las que me arrepiento de Node.js." En esta charla, Dahl presentó a Deno, un nuevo "motor" para JavaScript y TypeScript.

Dato curioso: "Deno" es un anagrama de "Nodo".

¿Deberían los desarrolladores tener miedo de que Deno reemplace Node.js en el futuro cercano?

Dahl mismo cree que no.



Enlace al video.

Como Dahl señala en su discurso, Deno sigue siendo inferior a Node.js en integridad (estabilidad).

Sin embargo, ambos son tiempos de ejecución de código JS fuera del navegador, por ejemplo, en un servidor web. Pero casi nadie puede decir cómo se desarrollará la "relación" entre Node.js y Deno en unos años.

Deno y Node.js: dispositivo interno


Node.js está escrito en C ++ y usa V8 para ejecutar código JS. V8 fue diseñado específicamente para que Google Chrome ejecute el código JS en el navegador lo más rápido posible. Actualmente, casi todos los navegadores, incluido Microsoft Edge, han cambiado a V8.

Deno también se basa en V8, pero en lugar de C ++, utiliza Rust, un lenguaje cuyo objetivo no es solo un buen rendimiento no inferior a C ++, sino también seguridad: eliminando errores de acceso a la memoria o desbordamientos del búfer.

La seguridad es uno de los principales inconvenientes de Node.js, porque después de iniciar la aplicación, obtiene acceso al sistema de archivos o la red.

Deno intenta arreglar esto pidiéndole permiso al usuario para acceder.

Un buen ejemplo es el siguiente código TS del sitio web oficial de Deno:

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

const s = serve({ port: 8000 })

for await (const req of s) {
	req.respond({ body: 'Hello World\n'})
}

Como puede ver, este es un servidor web muy simple que comienza así:

deno run app.ts

Sin embargo, dado que Deno no tiene permiso para acceder a la red, recibimos el siguiente mensaje:



Para proporcionar acceso, debemos hacer lo siguiente:

deno run --allow-net app.ts

Ahora nuestro servidor está funcionando. Pero la aplicación no tendrá acceso al sistema de archivos hasta que lo permitamos.

Adiós NPM, hola importación ES6


Otro problema de seguridad para nuestras aplicaciones es NPM: el uso de NPM no solo crea una enorme carpeta "node_modules", sino que también los paquetes instalados que hacen que la aplicación funcione pueden contener, en teoría, código malicioso.

Deno no usa NPM, en cambio, las bibliotecas se importan a través de URL, como se muestra en el ejemplo.

import { serve } from 'https://deno.land/std@0.50.0/http/server.ts'

La biblioteca se carga en la primera ejecución y se almacena en caché:



es similar a cómo copiamos el código para nuestro servidor web y lo almacenamos por separado en el servidor o la computadora para su reutilización. Las bibliotecas no necesitan ser recargadas.

Objeto de ventana fuera del navegador


Window es un objeto global en el navegador que contiene algunas funciones JS muy importantes.

Una de esas características es buscar. Fecth no se puede usar en Node.js: existen bibliotecas especiales para esto, pero en Deno sí.

Esto se debe al hecho de que Deno tiene acceso a Window, como se muestra en la documentación .

El siguiente código se puede ejecutar tanto en el navegador como en Deno:

fetch('https://jsonplaceholder.typicode.com/todos/1')
	.then(response => response.json)
	.then(data => console.log(data))

Soporte de TypeScript listo para usar


Usar TypeScript es, por supuesto, una cuestión de gustos. Algunos como él, otros no. Sea como fuere, Deno admite TypeScript de fábrica y, por supuesto, también admite JavaScript.

Puede verificar esto escribiendo código, guardando el archivo como .ts o .js y ejecutándolo con deno run. En mi opinión, esto no es una ventaja significativa, ya que el soporte de TypeScript se puede agregar fácilmente a Node.js.

Gracias por su atención.

All Articles