Aprenda Deno e vá além do Node.js
Publicados: 2023-04-20Embora o Node.js continue sendo o tempo de execução JavaScript do lado do servidor mais usado por uma margem enorme, tempos de execução alternativos como Deno e Bun chamaram a atenção à medida que tentam melhorar o conceito Node.js.
Deno, o mais popular dos dois tempos de execução mais recentes, aborda alguns problemas de segurança inerentes ao Node.js e fornece suporte mais abrangente para tecnologias como TypeScript e WebAssembly.
Neste artigo, você explorará os fundamentos do Deno, aprenderá como ele se compara ao Node.js e Bun e seguirá uma demonstração prática que usa o Deno para criar um servidor da Web HTTP simples.
O que é Deno?
Conforme os desenvolvedores ganharam familiaridade com o JavaScript, eles viram seu potencial para programação em máquinas locais. Então, eles criaram tempos de execução do lado do servidor – ambientes que permitem a execução de código JavaScript em máquinas sem usar um navegador.
Ryan Dahl desenvolveu o Node.js para esse fim e, mais tarde, criou o Deno para resolver alguns dos problemas que encontrou com o design 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 preguiçosas por padrão.
Algumas das principais vantagens do Deno incluem o seguinte:
- S ecurity by default — O usuário deve dar explicitamente permissão para que o código acesse a rede, sistema de arquivos ou ambiente.
- Suporte integrado para TypeScript e WebAssembly — Executar programas TypeScript e WebAssembly no Deno é tão fácil quanto executar programas JavaScript. O tempo de execução 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 estejam hospedadas, incluindo seu repositório GitHub, servidor ou CDN. A Deno também oferece um serviço de hospedagem de scripts para um acesso ainda mais fácil.
- Conformidade com os padrões da web — Deno visa seguir as mesmas APIs dos navegadores, o que significa que o código escrito para navegadores é facilmente traduzível para o tempo de execução.
Grandes empresas e grandes players do setor, como Slack, Netlify e Supabase, adotaram o Deno, mas sua adoção entre os desenvolvedores da Web foi menos difundida. De acordo com a pesquisa Stack Overflow de 2022, apenas 1,47% dos desenvolvedores profissionais que responderam à pesquisa estavam usando Deno, enquanto 46,31% relataram usar Node.js.
O que Deno faz?
Como qualquer tempo de execução do JavaScript, o Deno permite que os desenvolvedores executem o JavaScript no lado do servidor. Como resultado, você pode usar o Deno para realizar uma ampla variedade de tarefas de programação.
Deno se destaca mais em tarefas como 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 obtém informações de um banco de dados PostgreSQL, cria a página que o usuário deseja visualizar e a envia ao 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 alcançaria usando linguagens como Python ou Ruby.
Deno vs Nodo
O Deno visa ser uma melhoria em relação ao 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 da API padrão da Web, que permite que os desenvolvedores usem o mesmo código no navegador e no servidor.
Para equipes que trabalham em projetos JavaScript do lado do servidor, o Deno se tornou uma alternativa viável ao Node. E embora sua funcionalidade semelhante tenha convencido alguns desenvolvedores de que o Deno poderia substituir o Node.js, essa possibilidade é improvável por alguns motivos principais.
O Node.js é o tempo de execução JavaScript mais popular e acumulou um vasto ecossistema de pacotes pré-escritos e uma grande e ativa comunidade de usuários. Esses recursos inestimáveis ajudam o Node.js a continuar sendo um tempo de execução extremamente atraente.
Em contraste, o Deno é novo: a versão 1.0 foi lançada em maio de 2020, então relativamente poucos desenvolvedores tiveram tempo para brincar com ela. Aprender uma nova ferramenta aumenta 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 onde a segurança é essencial, como finanças, os recursos de segurança do Deno podem fazer uma mudança valer a pena.
Deno vs Bun
O ex-engenheiro do Stripe, Jarred Sumner, lançou Bun pela primeira vez em julho de 2022 para testes beta. O Bun é um tempo de execução 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 possui desempenho incrivelmente rápido, superando Node.js e Deno. Os principais recursos permitem esses recursos:
- Um mecanismo melhor — Em vez do mecanismo V8 JavaScript e Web Assembly do Google, Bun usa o JavaScriptCore mais rápido e eficiente como seu mecanismo JavaScript subjacente.
- Mais controle de código — Bun é escrito em Zig, uma linguagem de baixo nível que fornece maior controle do que o JavaScript sobre a execução do código.
- Eficiência ajustada — A equipe que trabalha no Bun priorizou criação de perfil, benchmarking e otimização durante o desenvolvimento para garantir a eficiência do código.
Bun é tão novo que há relativamente pouco suporte da comunidade para ajudar na solução de problemas. No entanto, Bun pode ser divertido para experimentação. As equipes que exigem especificamente 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.
Introdução ao 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 responda às solicitações HTTP com “Olá do servidor!”
Instalando 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 começar a trabalhar com o Deno é instalá-lo como um pacote npm, assim:
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
enquanto ele cria um arquivo package.json básico.)
Após inicializar seu aplicativo, execute npm install deno-bin
para instalar o pacote binário Deno. Agora você pode atualizar o arquivo package.json para habilitar a inicialização do aplicativo com npm start
. Adicione a linha em negrito abaixo à propriedade do objeto “scripts” no arquivo package.json padrão:
"scripts": { "start": "deno run --allow-net app.ts", "test": "echo \"Error: no test specified\" && exit 1" },
Esta adição de script permite que Deno execute o módulo app.ts com privilégios de rede ( --allow-net
). Lembre-se, ao trabalhar com o Deno, você precisa permitir explicitamente o acesso a uma rede ou sistema de arquivos.
Agora, você está pronto para criar o módulo app.ts , responsável por escutar em uma porta e atender as requisiçõ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
da server.ts Deno library
armazenada no site oficial Deno.land. Esse código também fornece um manipulador de função serve
para solicitações recebidas. A função do manipulador responde a cada solicitação com “Olá do servidor!”
A função serve
também aceita parâmetros opcionais, como o número da porta na qual você deseja servir. Aqui, o exemplo de código usa esses parâmetros para servir na porta 8000.
Em seguida, inicie o servidor executando npm start
. Isso deve iniciar um servidor que escuta em localhost:8000
e responde às solicitações com uma saudação.
Se você deseja estender o servidor para uma API completa, provavelmente precisará adicionar conectividade de banco de dados. Isso é fácil de fazer, pois a comunidade Deno criou drivers que suportam bancos de dados populares como MariaDB/MySQL, PostgreSQL, MongoDB e muito mais.
Resumo
Os tempos de execução variam de comuns e confiáveis a muito experimentais. Escolher o caminho certo para o seu projeto depende do seu projeto e de como você deseja que seu tempo de execução o ajude a atingir seus objetivos.
Node.js funciona bem para a maioria dos projetos. Possui um grande ecossistema e uma grande comunidade que pode ajudar com uma ampla variedade de cenários de solução de problemas.
O Deno tem o benefício de segurança extra e uma melhor experiência do desenvolvedor. Ao mesmo tempo, é mais adequado para equipes experientes, pois seus benefícios superam o tempo e os custos de mão-de-obra de aprender um tempo de execução desconhecido.
Por fim, embora Bun seja muito experimental para a maioria dos projetos profissionais, é um tempo de execução único e divertido para um projeto pessoal ou para expandir.
Em suma, Deno oferece equilíbrio entre os benefícios do Node.js e as possibilidades experimentais do Bun. Embora o Node.js seja uma opção útil para a maioria dos projetos, o Deno pode estar na vanguarda de como o desenvolvimento da Web evoluirá no futuro.
Enquanto isso, pratique suas costeletas Deno inscrevendo-se no Application Hosting Hobby Tier da Kinsta - codificando agora e escalando depois.