Embora o Node.js continue sendo o ambiente de execução JavaScript do lado do servidor mais usado por uma grande margem, ambientes alternativos como Deno e Bun têm ganhado atenção ao tentar melhorar o conceito do Node.js.

Deno, o mais popular entre os dois novos ambientes, aborda algumas questões de segurança inerentes ao Node.js e oferece suporte mais abrangente para tecnologias como TypeScript e WebAssembly.

Neste artigo, você vai explorar os fundamentos do Deno, aprender como ele se compara ao Node.js e ao Bun, e acompanhar uma demonstração prática que usa o Deno para construir um servidor web HTTP simples.

O que é Deno?

À medida que os desenvolvedores se familiarizaram com o JavaScript, eles perceberam seu potencial de programação em máquinas locais. Assim, eles criaram tempos de execução no lado do servidor – ambientes que permitem a execução de código JavaScript em computadores sem usar um navegador.

Ryan Dahl desenvolveu o Node.js para esse fim e, posteriormente, criou o Deno para resolver alguns dos problemas que encontrou no projeto original do Node.js. Algumas falhas notáveis incluem sua dependência de um gerenciador de pacotes centralizado como o npm, a falta de uma biblioteca padrão e configurações de segurança frouxas por padrão.

Algumas das principais vantagens do Deno incluem:

  • Segurança por padrão – O usuário deve dar permissão explícita para que o código acesse a rede, o sistema de arquivos ou o ambiente.
  • Suporte integrado para TypeScript e WebAssembly – Executar programas em TypeScript e WebAssembly no Deno é tão fácil quanto executar programas em JavaScript. O ambiente compila as linguagens da mesma forma que faz com o JavaScript.
  • Um gerenciador de pacotes descentralizado – Em vez de depender de um repositório de pacotes como o npm ou o gerenciador de pacotes do Bun, o Deno pode importar código diretamente de URLs. Esse recurso significa que você pode carregar dependências de onde quer que elas estejam hospedadas, incluindo seu repositório do GitHub, servidor ou CDN. O Deno também oferece um serviço de hospedagem de scripts para facilitar ainda mais o acesso.
  • Conformidade com os padrões da web – O Deno pretende seguir as mesmas APIs que os navegadores, o que significa que o código escrito para navegadores é facilmente traduzível para o runtime.

Grandes empresas e importantes participantes do setor, como Slack, Netlify e Supabase, adotaram o Deno, mas sua adoção entre os desenvolvedores da web tem sido menos difundida. Segundo a pesquisa Stack Overflow de 2022, apenas 1,47% dos desenvolvedores profissionais que responderam à pesquisa estavam usando o Deno, enquanto 46,31% relataram usar o Node.js.

O que o Deno faz?

Como qualquer JavaScript runtime, o Deno permite que os desenvolvedores executem JavaScript no lado do servidor. Como resultado, você pode usar o Deno para realizar uma ampla variedade de tarefas de programação.

O Deno se destaca mais em tarefas como o desenvolvimento de aplicativos de servidor que respondem a solicitações de usuários baseadas na web. Por exemplo, se você estiver criando uma livraria on-line, poderá usar o Deno para criar um aplicativo que obtenha informações de um banco de dados PostgreSQL, crie a página que o usuário deseja visualizar e a envie para o navegador para renderização.

Você também pode usar o Deno para tarefas de programação de nível inferior, como criar uma ferramenta de linha de comando para gerenciar suas tarefas pendentes por meio do terminal. Em outras palavras, você pode usar o Deno para atingir os mesmos objetivos que atingiria usando linguagens como Python ou Ruby.

Deno vs Node

O Deno pretende ser um aprimoramento do Node.js e cumpre essa promessa em várias áreas importantes. O Deno melhora a segurança ao permitir configurações de acesso mais refinadas para diferentes módulos de código. Ele também se concentra na conformidade com a API padrão da web, o que permite que os desenvolvedores usem o mesmo código no navegador e no servidor.

Para as equipes que trabalham em projetos JavaScript no lado do servidor, o Deno se tornou uma alternativa viável ao Node. E, embora a funcionalidade semelhante tenha convencido alguns desenvolvedores de que o Deno poderia substituir o Node.js, essa possibilidade é improvável por alguns motivos importantes.

O Node.js é o JavaScript runtime mais popular e acumulou um vasto ecossistema de pacotes pré-escritos e uma comunidade de usuários grande e ativa. Esses recursos inestimáveis ajudam o Node.js a continuar sendo um runtime extremamente atraente.

Por outro lado, o Deno é novo: a versão 1.0 foi lançada em maio de 2020, portanto, relativamente poucos desenvolvedores tiveram tempo de brincar com ele. Aprender uma nova ferramenta prolonga os cronogramas de desenvolvimento. Além disso, não está claro se o Deno traria benefícios significativos para muitos projetos simples.

Mas se você estiver criando um aplicativo em uma área na qual a segurança é essencial, como finanças, as capacidades de segurança do Deno podem tornar uma mudança válida.

Deno x Bun

O ex-engenheiro da Stripe, Jarred Sumner, lançou o Bun pela primeira vez em julho de 2022 para testes beta. Bun é um runtime mais experimental do que o Deno e, ao contrário do Deno, foi projetado para ter ampla compatibilidade com versões anteriores do Node.js.

Bun também apresenta um desempenho incrivelmente rápido, superando o Node.js e o Deno. As principais características que possibilitam essas capacidades são:

  • Um mecanismo melhor – Em vez do mecanismo V8 JavaScript e Web Assembly do Google, o Bun usa o JavaScriptCore, mais rápido e eficiente, como seu mecanismo JavaScript subjacente.
  • Mais controle de código – O Bun é escrito em Zig, uma linguagem de baixo nível que oferece mais controle do que o JavaScript sobre a execução do código.
  • Eficiência com ajuste fino – A equipe que trabalha no Bun priorizou a criação de perfis, o benchmarking e a otimização durante o desenvolvimento para garantir a eficiência do código.

O Bun é tão novo que há relativamente pouco suporte da comunidade para ajudar na solução de problemas. No entanto, o Bun pode ser divertido para você fazer experimentos. As equipes que precisam especificamente de um aumento de desempenho podem achar o Bun útil para seus projetos, mas o desenvolvimento da web frequentemente prioriza outros fatores além do desempenho.

Começando com o Deno

Agora que você aprendeu um pouco sobre o Deno e como ele se compara a outros runtimes JavaScript populares, é hora de ver como ele funciona. Nesta seção, você aprenderá como criar um servidor simples no Deno que responde a solicitações HTTP com “Hello from the server!”

Instalação do Deno

Você pode instalar o Deno em uma máquina como um executável binário usando estas instruções de instalação da documentação oficial. No macOS, por exemplo, você pode instalar o Deno com o comando brew install deno.

Outra maneira de você começar a trabalhar com o Deno é instalá-lo como um pacote npm, como este:

Crie uma pasta para o seu projeto (talvez deno_example) e execute o comando npm init dentro dela. (Você pode aceitar todas as opções padrão sugeridas pelo init, pois ele cria um arquivo package.json básico.)

Após inicializar o seu aplicativo, execute npm install deno-bin para instalar o pacote binário do Deno. Agora você pode atualizar o arquivo package.json para habilitar o lançamento do aplicativo com npm start. Adicione a linha em negrito abaixo à propriedade “scripts” no arquivo package.json padrão:

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

Essa adição de script permite que o Deno execute o módulo app.ts com privilégios de rede (--allow-net). Lembre-se de que, ao trabalhar com o Deno, você precisa permitir explicitamente o acesso a uma rede ou a um sistema de arquivos.

Agora, você está pronto para criar o módulo app.ts, responsável por escutar em uma porta e atender às solicitações do usuário.

Criando o módulo app.ts

Criar um servidor básico no Deno é extremamente simples. Primeiro, crie um arquivo app.ts e cole o seguinte código:

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

O código usa a função serve do arquivo server.ts Deno library armazenada no site oficial do Deno.land. Esse código também fornece um manipulador da função serve para solicitações de entrada. A função do manipulador responde a todas as solicitações com “Hello from the server!”

A função serve também recebe parâmetros opcionais, como o número da porta em que você deseja servir. Aqui, o exemplo de código usa esses parâmetros para atender à porta 8000.

 

Deno server in action
Servidor Deno em ação

Se quiser estender o servidor para uma API completa, você provavelmente precisará adicionar conectividade com o banco de dados. Isso é fácil de fazer, pois a comunidade Deno criou drivers compatíveis com bancos de dados populares como MariaDB/MySQL, PostgreSQL, MongoDB e outros.

Resumo

Os runtimes podem ser desde bem conhecidos e estáveis até bastante experimentais. Escolher o certo para o seu projeto vai depender das suas necessidades e de como o runtime pode te ajudar a atingir suas metas.

O Node.js funciona bem para a maioria dos projetos. Ele tem um grande ecossistema e uma grande comunidade que pode ajudar você com uma grande variedade de cenários de solução de problemas.

O Deno tem o benefício de oferecer segurança extra e uma melhor experiência para desenvolvedores. Ao mesmo tempo, ele é mais adequado para equipes experientes, de modo que seus benefícios superem o tempo e os custos de trabalho para aprender um runtime desconhecido.

Por fim, embora Bun seja muito experimental para a maioria dos projetos profissionais, é um runtime exclusivo e divertido para você usar em um projeto pessoal ou para expandir.

No geral, o Deno oferece um equilíbrio entre os benefícios do Node.js e as possibilidades experimentais do Bun. Enquanto o Node.js é uma escolha viável para a maioria dos projetos, o Deno pode estar na vanguarda de como o desenvolvimento web evoluirá no futuro.

Enquanto isso, pratique suas habilidades em Deno inscrevendo-se no Plano Hobby Tier da Hospedagem de Aplicativos da Kinsta — comece a codificar agora e escale mais tarde.

Jeremy Holcombe Kinsta

Editor de Conteúdo & Marketing na Kinsta, Desenvolvedor Web WordPress e Escritor de Conteúdo. Fora do universo WordPress, eu curto praia, golfe e filmes. Também enfrento problemas de gente alta ;).