O que é o Deno e ele substituirá o Node.js?



Dia bom. Apresento a você a tradução do artigo “Deno vs. Node.js - Aqui estão as diferenças mais importantes ” de Louis Petrik.

O Deno é o novo Node.js? Ou apenas uma boa alternativa? Neste artigo, tentarei responder a essas perguntas.

História de Deno


Deno e Node.js são o trabalho de uma pessoa - Ryan Dahl.

Dahl trabalha no Node.js desde 2009, mas depois de alguns anos deixou a equipe. Em 2018, ele fez uma apresentação, "10 coisas de que me arrependo pelo Node.js." Nesta palestra, Dahl apresentou o Deno - um novo "mecanismo" para JavaScript e TypeScript.

Curiosidade: "Deno" é um anagrama de "Node". Os

desenvolvedores devem ter medo de que o Deno substitua o Node.js em um futuro próximo?

O próprio Dahl acredita que não.



Link para o vídeo.

Como observa Dahl em seu discurso, Deno ainda é inferior ao Node.js em plenitude (estabilidade).

No entanto, ambos são tempos de execução de código JS fora do navegador, por exemplo, em um servidor da web. Mas dificilmente alguém pode dizer como o "relacionamento" entre o Node.js e o Deno se desenvolverá em alguns anos.

Deno e Node.js: dispositivo interno


O Node.js é escrito em C ++ e usa a V8 para executar o código JS. O V8 foi projetado especificamente para o Google Chrome para executar o código JS no navegador o mais rápido possível. Atualmente, quase todos os navegadores, incluindo o Microsoft Edge, mudaram para a V8.

O Deno também é baseado na V8, mas, em vez do C ++, usa o Rust, uma linguagem cujo objetivo não é apenas um bom desempenho, não inferior ao C ++, mas também segurança: eliminar erros de acesso à memória ou estouros de buffer.

A segurança é uma das principais desvantagens do Node.js, pois após o lançamento do aplicativo, ele obtém acesso ao sistema de arquivos ou à rede.

Deno tenta corrigir isso, solicitando ao usuário permissão para acessar.

Um bom exemplo é o seguinte código TS do site 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 você pode ver, este é um servidor Web muito simples que começa assim:

deno run app.ts

No entanto, como o Deno não tem permissão para acessar a rede, recebemos a seguinte mensagem:



Para fornecer acesso, precisamos fazer o seguinte:

deno run --allow-net app.ts

Agora, o servidor está funcionando. Mas o aplicativo não terá acesso ao sistema de arquivos até que o permitamos.

Adeus NPM, olá ES6 import


Outro problema de segurança para nossos aplicativos é o NPM: o uso do NPM não apenas cria uma enorme pasta “node_modules”, mas também os pacotes instalados que fazem o aplicativo funcionar podem teoricamente conter códigos maliciosos.

O Deno não usa o NPM; as bibliotecas são importadas via URL, conforme mostrado no exemplo.

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

A biblioteca é carregada na primeira execução e armazenada em cache:



é semelhante à forma como copiamos o código para o servidor da Web e o armazenamos separadamente no servidor ou no computador para reutilização. As bibliotecas não precisam ser recarregadas.

Objeto de janela fora do navegador


Window é um objeto global no navegador que contém algumas funções JS muito importantes.

Um desses recursos é buscar. O Fecth não pode ser usado no Node.js - existem bibliotecas especiais para isso, mas no Deno pode.

Isso se deve ao fato de o Deno ter acesso ao Window, como segue na documentação .

O código a seguir pode ser executado no navegador e no Deno:

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

Suporte TypeScript pronto para uso


Usar o TypeScript é, obviamente, uma questão de gosto. Alguns gostam dele, outros não. Seja como for, o Deno suporta o TypeScript imediatamente e, é claro, também suporta o JavaScript.

Você pode verificar isso escrevendo código, salvando o arquivo como .ts ou .js e executando-o com deno run. Na minha opinião, isso não é uma vantagem significativa, pois o suporte ao TypeScript pode ser facilmente adicionado ao Node.js.

Obrigado pela atenção.

All Articles