Somos sua nova área de tecnologia

Deno vs Node: Ninguém está pronto para a mudança

Inscreva-se em nossa Newsletter!

Muito pode ser dito sobre o design moderno do Deno. Mas ele pode vencer a corrida contra o Node.js, o ambiente de execução de JavaScript mais popular?

Introdução

Não há argumento em dizer que o Node.js é o ambiente de tempo de execução de JavaScript mais popular e amplamente usado do mundo. Mas, a chegada do Deno em 2018 criou um grande alvoroço, e os desenvolvedores agora podem acessar um framework mais seguro com recursos modernos.

O Deno é introduzido pelo mesmo autor (Ryan Dahl) que o Node.js. É apelidado como seu sucessor, aqui para corrigir alguns dos principais problemas de design no Node.js. Embora, o anúncio do Deno tenha suscitado muitas especulações sobre se o Deno está substituindo o Node.js ou não. Até agora, não houve mudanças significativas. A maioria dos desenvolvedores permanece satisfeita com o Node.js.

Neste artigo, tentarei explicar por que a adoção do Deno se tornou muito lenta e por que as pessoas ainda preferem o Node.js. Em seguida, tentarei fazer uma comparação entre o Node.js e o Deno.

O que é o Node.js?

Node.js é um ambiente de execução de JavaScript open-source, cross-platform e de lado do servidor prevalente construído no motor V8 JS do Google. Ele tem dominado o mundo do desenvolvimento web desde 2009.

Node se concentra principalmente em servidores HTTP baseados em eventos. Quando se trata de lidar com solicitações, ele executa um loop de eventos de thread única registrado com o sistema, e cada solicitação de entrada aciona uma função de retorno de chamada JavaScript. As funções de retorno de chamada são capazes de lidar com solicitações usando chamadas de E / S não bloqueantes.

Além disso, pode distribuir a carga entre núcleos de CPU criando threads de um pool para executar tarefas bloqueantes ou intensivas em CPU. Ao contrário da maioria dos frameworks concorrentes que escalam por meio de threads, o mecanismo de escalonamento baseado em funções de retorno de chamada do Node pode acomodar mais solicitações com uso mínimo de memória.

Node.js é leve e ideal para aplicações web em tempo real escaláveis e intensivas em dados, que podem ser executadas em dispositivos distribuídos graças à sua arquitetura assíncrona de E/S e eventos.

O que é o Deno?

image 403

Como mencionado anteriormente, o Deno é um novo framework JavaScript que busca endereçar as deficiências de design do Node e fornecer um ambiente de desenvolvimento moderno. De acordo com Dahl, o criador dos dois runtimes, o Node.js tem três deficiências significativas:

  • Um sistema de módulos mal projetado que depende de distribuição centralizada.
  • APIs legadas instáveis.
  • APIs legadas instáveis.

Supostamente, o Deno corrige todos os três problemas e oferece uma melhor experiência.

Deno é um runtime JavaScript, TypeScript e WebAssembly com padrões de segurança e sem acesso a arquivos, rede ou ambiente, a menos que seja explicitamente ativado. É construído sobre o V8 JS Engine, Rust e Tokio. O Deno adota padrões da plataforma web, sempre é distribuído com um único arquivo executável e tem ferramentas de desenvolvimento embutidas para oferecer um runtime produtivo e seguro. Ele possui um conjunto de módulos padrão revisados (auditados) que são garantidos para funcionar corretamente durante o tempo de execução do Deno. O Deno também suporta a execução de arquivos TypeScript nativos, sem a necessidade de mais configurações.

Conteúdo relacionado para sua alma e habilidade:

Deno vs. Node: Main Differences

Agora, vamos dar uma olhada em uma comparação entre Node e Deno.

Third-party package management

Com o Deno, os desenvolvedores podem instalar pacotes diretamente de URLs sem ter um registro centralizado como o npm. Apesar do risco de baixar pacotes diretamente de uma URL -por exemplo, se o servidor que hospeda o pacote for comprometido, um invasor poderia modificar o código para incluir funcionalidades maliciosas- o Deno oferece uma maneira de mitigar isso, armazenando em cache os módulos baixados. Os pacotes podem ser importados diretamente para o script como uma biblioteca. Ao permitir que os scripts sejam executados a partir de qualquer URL pública, o Deno elimina a necessidade de um gerenciador de pacotes para importar os módulos. No entanto, ainda há um risco em importar módulos de terceiros. O arquivo e o arquivo também foram removidos. Package.jsonnode_modules

Em contraste, o Node.js usa o npm para gerenciar todos os pacotes. Ele também tem um vasto ecossistema de bibliotecas e pacotes.

O mecanismo de importação de módulos do Deno é mais flexível que o do Node, permitindo que você importe código de qualquer lugar, incluindo o GitHub e qualquer CDN ou registro que você hospede. Isso permite importações de módulos sem a necessidade de baixar ou instalar.

APIs

O Node.js foi criado antes que o conceito de , ou , fosse introduzido no JavaScript. Por isso, a maioria das APIs foi projetada para aceitar uma chamada de erro primeiro. Esse método frequentemente criava códigos verbosos e complexos. Agora que os desenvolvedores do Node têm acesso a essa sintaxe, eles também devem gerenciar a compatibilidade com versões anteriores, pois as APIs mudam frequentemente e são instáveis. Promisesasync/awaitasync/await

No Deno, isso é completamente diferente. Não há necessidade de encapsular em uma função, pois já usa e suporta as últimas funcionalidades do JavaScript. Portanto, o Deno facilita a ligação de APIs baseadas no futuro às promessas do JavaScript, simplificando este processo para os desenvolvedores. O Deno também pretende ser compatível com as APIs da plataforma web usadas pelo código JavaScript executado nos navegadores. Várias das APIs avançadas mais populares, como , , , e , são suportadas de uma forma que atenda aos padrões. asyncawaitFetchWeb StorageWeb WorkersBroadcast Channel

Segurança

A segurança foi uma das principais razões pelas quais Ryan Dahl criou o Deno.

O Deno executa todo o código em um ambiente de sandbox seguro que proíbe o acesso ao sistema de arquivos. O Deno pede primeira autorização antes de acessar o sistema de arquivos.

sso ao sistema de arquivos. O Deno pede primeira autorização antes de acessar o sistema de arquivos. Para obter permissão, você precisaria obtê-la por meio de um argumento de linha de comando que impediria a remoção de qualquer arquivo sem o consentimento do desenvolvedor. Vários sinalizadores de linha de comando no Deno podem ser usados em tempo de execução para habilitar determinadas funcionalidades para scripts específicos. Essas funcionalidades estão inativas por padrão; você deve definir explicitamente um sinalizador para quaisquer elementos que seu script possa exigir.

Esses sinalizadores consistem em:

  • — allow-env

Permitir acesso ao ambiente para coisas como obter e definir variáveis de ambiente.

  • — allow-hrtime

Permitir medição de tempo de alta resolução.

  • — allow-net

Permitir acesso à rede.

  • — allow-read

Permitir acesso de leitura ao sistema de arquivos.

  • — allow-run

Permitir a execução de subprocessos.

  • — allow-write

Permitir acesso de gravação ao sistema de arquivos.

Node.js nunca foi projetado para ser um framework altamente seguro. Por exemplo, o Node não exige conceder acesso para ler ou gravar no sistema de arquivos e não está isolado. Portanto, qualquer biblioteca de terceiros pode causar problemas com um pouco de negligência. Além disso, existem medidas de segurança padrão que protegem contra ameaças como o roubo de solicitação cruzada (CSRF) e o script cruzado (XSS) vantajosos para os usuários do Node. Esses mecanismos envolvem verificar os logs, gerenciar corretamente erros e exceções e verificar a entrada do usuário.

Portanto, apesar de se acostumar com a rigidez do módulo de segurança, o Deno é a melhor opção para um ambiente mais seguro.

Suporte ao TypeScript

TypeScript é um superconjunto de JavaScript que permite que os usuários adicionem tipagem estática opcional. O Deno suporta o TypeScript nativamente, utilizando um compilador TypeScript com uma técnica de cache. Como resultado, o Deno pode compilar, verificar o tipo e executar o seu código sem precisar traduzi-lo para JavaScript.

Embora o Node.js não tenha suporte nativo ao TypeScript como o Deno, o TypeScript é um conhecido e amplamente difundido linguagem na comunidade Node.js graças ao pacote TypeScript. Como resultado, o TypeScript e o Node podem funcionar juntos rapidamente com um esforço mínimo. Se você já tiver o Node e o npm instalados, basta executar para instalar o TypeScript na sua máquina globalmente. Em seguida, execute para criar um arquivo de configuração do TypeScript. O compilador do TypeScript pode então ser usado para compilar seus arquivos. npm install -g typescripttsc --inittsc .ts

Deno é o framework apropriado se você gosta de TypeScript e prefere experimentar um framework novo. Além disso, o desenvolvimento com TypeScript no Deno não requer nenhuma configuração extra.

Por que os desenvolvedores escolhem o Node em vez do Deno?

Em tudo o que abordamos até agora, é óbvio que o Deno oferece alguns recursos especiais para desenvolvedores, como um sistema de suporte sólido e compatibilidade nativa com o TypeScript. As estratégias de design e outras ferramentas embutidas são feitas com a intenção de dar aos desenvolvedores um ambiente de execução produtivo e uma experiência positiva.

Então, por que o Deno ainda não substituiu o Node? Como podemos ver, a adoção do Deno sobre o Node.js é muito lenta. Há muitas razões pelas quais os desenvolvedores ainda preferem usar o Node.js, apesar de ter um novo framework moderno que aborda muitos dos seus problemas de design.

Quando o Node.js foi originalmente lançado, alguns de nós começamos a usá-lo e o estávamos utilizando em aplicações ao vivo. Ao longo dos anos, o Node mudou muito para atender às necessidades da comunidade de desenvolvimento de software. Agora é o runtime JavaScript mais amplamente utilizado. Graças à sua ampla utilização, você pode acessar uma comunidade de desenvolvedores de alto nível. Construído no npm, o sistema de pacotes Node.js é extenso e simples de manipular. Portanto, quando a flexibilidade e a familiaridade são suas principais preocupações, o Node.js é a melhor opção.

No entanto, o Node ainda não alcançou a perfeição. Muito longe disso, na verdade. O Deno faz avanços em vários campos importantes em que o Node ainda está atrás, especialmente quando se trata de segurança e conformidade com padrões. O padrão de binário único do Deno o torna mais portátil do que o Node, e a arquitetura de módulos abertos pode ser estabelecida como a norma futura para importações de dependências.

O que está impedindo os desenvolvedores de mudarem para o Deno?

Embora a comunidade do Deno seja ativa, ela ainda é bastante pequena. Pacotes específicos do Deno são bastante raros e a camada de compatibilidade com o Node nem sempre é confiável. Se você deseja usar uma determinada biblioteca ou precisa de ajuda, isso pode colocá-lo em desvantagem.

Uma área clara onde o Deno está em desvantagem é a falta de pacotes de terceiros, bem como o fato de, dada sua imaturidade, não ter passado por tanto uso real quanto o Node. Por outro lado, o Node.js é bastante modular. Muitas bibliotecas podem ser encontradas em um único local graças ao Gerenciador de Pacotes do Node (npm). Sua popularidade é principalmente devido ao fato de que você pode atualizar seu trabalho baixando incontáveis números de pacotes.

Além disso, muitos dos recursos oferecidos pelo Deno podem ser alcançados no Node.js com a ajuda de bibliotecas de terceiros. Portanto, se houver apenas alguns aspectos do Deno que você gosta, provavelmente poderá conseguir o mesmo com o Node.js, embora não tão suavemente como com o Deno.

A simplicidade de trabalhar com permissões no Node é um recurso adicional crucial. Você pode obter rapidamente feedback na plataforma sem ter que passar por uma variedade de autorizações. O Node.js exige um esforço mínimo para codificação rápida, pois raramente solicita permissões específicas. Como resultado, é ideal para todos os tipos de projetos dinâmicos que exigem atualizações regulares e um grande time de especialistas.

Portanto, levando esses fatores em consideração, eu diria que a maioria dos desenvolvedores está satisfeita com a direção que o Node.js está tomando e provavelmente não fará mudanças em breve.

Comparado à grande e próspera comunidade Node.js – uma comunidade digna de mais exploração – Deno ainda está na fase de “aprender a andar”. Ainda não foi testado extensivamente em sistemas reais de produção e os desenvolvedores ainda estão se adaptando a este novo ambiente de execução. Certamente, tem enorme promessa porque resolve problemas importantes do Node, incluindo segurança, módulos, callbacks e o sistema de distribuição central. Por enquanto, Deno é principalmente interessante para os primeiros adotantes como uma novidade. Gradualmente, a comunidade que suporta o Deno deverá ser capaz de torná-lo uma necessidade para o desenvolvimento web.

O Criador do C++ revela o que o atraiu para a programação.

YouTube video

Conclusão

Depois de comparar as principais características do Deno vs. Node.js, espero que você possa agora ver o potencial do Deno e entender por que os desenvolvedores estão adotando-o lentamente. O Deno sem dúvida continuará a atrair cada vez mais atenção e tem (na minha opinião) um futuro muito promissor.

Mas como desenvolvedor de software que precisa fazer as coisas acontecerem, você é quem sabe o que melhor atende às suas necessidades.

Obrigado por ler!

PIUMI LIYANA GUNAWARDHANA, SOFTWARE ENGINEER TECHNICAL WRITER

Gostou do artigo?

Facebook
LinkedIn
Pinterest
WhatsApp
Picture of Amanda Braga

Amanda Braga

×