Node.js vs. Deno vs. Bun: comparação de desempenho e runtimes JavaScript
5 de setembro de 2023
0 minutos de leituraPor que escolher o runtime JavaScript certo é importante
Os runtimes JavaScript permitem executar código de aplicações fora do navegador. Assim, você pode disponibilizar sites como aplicações hospedadas. Também pode usar runtimes JavaScript para scripts de uso geral.
O runtime escolhido terá um impacto significativo no desempenho das suas aplicações, com diferenças consideráveis na velocidade de processamento de solicitações e acesso ao banco de dados. Ele também afeta a facilidade de desenvolvimento e a escalabilidade.
Node.js vs. Deno vs. Bun
Node.js
Node.js é o atual campeão dos runtimes JavaScript e foi classificado como a tecnologia web mais popular em 2023, segundo os desenvolvedores do Stack Overflow. Criado por Ryan Dahl, foi lançado em 2009. Não é exagero dizer que revolucionou as possibilidades do JavaScript quando chegou ao mercado. Com ele, desenvolvedores podem criar aplicações avançadas de back-end usando JavaScript.
Hoje, existe um vasto ecossistema em torno do Node.js, com recursos e bibliotecas de sobra.
Deno
Deno é um runtime JavaScript baseado em Rust. Assim como o Node.js, foi criado e lançado por Ryan Dahl
Um dos seus principais objetivos é melhorar a segurança do Node.js. No Deno, o acesso a arquivos, à rede e ao ambiente precisa ser habilitado explicitamente, reduzindo a probabilidade de problemas de segurança nessas áreas. Ele também foi projetado para oferecer melhor suporte a JSX e TypeScript e se alinhar mais aos padrões da web. Para facilitar a implantação, os aplicativos são distribuídos como um único executável independente.
O Deno também conta com um ecossistema de ferramentas para ajudar desenvolvedores a dar o pontapé inicial nos projetos. Fresh é um framework web criado para o Deno, e Lume é o gerador de sites estáticos da plataforma.
Bun
Bun é o runtime mais recente a disputar sua atenção. Desenvolvido com Zig, ele busca ser um runtime e conjunto de ferramentas completo, com foco em velocidade, empacotamento, testes e compatibilidade com pacotes do Node.js. Um dos seus maiores atrativos é o desempenho, comprovadamente superior ao do Node.js e do Deno. Isso o torna uma opção muito atraente, se conseguir cumprir todas essas promessas.
Para demonstrar seu desempenho, os mantenedores do Bun apresentam um benchmark de um handler HTTP que renderiza uma página React no servidor. O Bun processou cerca de 68.000 solicitações por segundo, em comparação com aproximadamente 29.000 no Deno e 14.000 no Node.js. É uma diferença e tanto. Jarred Sumner compartilha regularmente atualizações sobre o desenvolvimento do Bun e benchmarks recentes no Twitter. Siga-o para acompanhar as novidades.
O Bun também inclui recursos de empacotamento e execução de tarefas para projetos em JavaScript e TypeScript. Assim como o Deno, ele é distribuído como um binário único e oferece suporte à Web API. Também é compatível com algumas bibliotecas do Node.js e com o npm.
Comparação entre runtimes JavaScript
Vamos analisar as diferenças com mais atenção, considerando desempenho, suporte e comunidade, estabilidade, segurança e recursos adicionais.
Desempenho e velocidade
Vamos direto ao ponto: Bun vence. Já vimos seu desempenho e quantas solicitações por segundo ele consegue processar, o que é impressionante. O mesmo vale para as operações com bancos de dados. A média de consultas por segundo ao carregar o banco de dados Northwind para SQLite usando o exemplo de benchmark do Bun é:
Runtime | Média de consultas por segundo |
|---|---|
Node.js | 21.29 |
Deno | 43.50 |
Bun | 81.37 |
Em outra comparação entre Node.js, Deno e Bun, o Bun é o mais rápido no processamento de conexões simultâneas. Ele também processa muito mais solicitações por segundo. Por exemplo, com 10 conexões simultâneas, o Bun chega a 110.000 solicitações por segundo, enquanto o Node.js processa 60.000 e o Deno, 67.000. A tendência se mantém à medida que o número de conexões simultâneas aumenta e os runtimes são comparados.
Por que o Bun é muito mais rápido que o Node?
Embora haja divergências sobre a eficácia dos cenários usados nos testes de desempenho, o Bun continua vencendo. O Node.js fica em último lugar em todas as comparações e tem resultados especialmente fracos na velocidade de acesso ao banco de dados. Em geral, Deno e Node.js não ficam tão distantes, enquanto o Bun supera os dois com folga. Embora o Node.js esteja atrás nesse quesito, Yagiz Nizipli lidera esforços para melhorar o desempenho em vários aspectos do Node.js, como aumentar em cerca de 80% a 90% a velocidade de análise de URLs.
Você também pode executar os testes de desempenho do Bun no seu próprio ambiente e conferir os resultados nos seguintes cenários:
A velocidade do Bun é uma prioridade para seus desenvolvedores. Ele usa o JavaScriptCore, que também é usado no Safari. Já o Deno e o Node.js usam o mesmo mecanismo JavaScript V8 do Chrome.
Além de ser rápido, o Bun foi projetado para iniciar rapidamente e manter o desempenho mesmo quando você executa várias instâncias. Isso faz dele uma boa opção para aplicações com escalabilidade dinâmica. Se houver um aumento repentino no tráfego e você precisar criar instâncias rapidamente, o Bun foi feito para ajudar a manter seus serviços disponíveis o quanto antes.
Suporte e comunidade
Os três projetos são de código aberto, mas nem todos recebem apoio exclusivamente da comunidade. O Node.js conta com o apoio da OpenJS Foundation e depende estritamente da comunidade e de voluntários. Já o Deno e o Bun recebem apoio de empresas com fins lucrativos e projetos financiados por capital de risco.
O Node.js tem um ecossistema consolidado e uma comunidade enorme, com orientações disponíveis online para praticamente qualquer caso de uso. Em contrapartida, Deno e Bun são muito mais recentes, então há menos materiais de suporte. Ainda assim, não faltam desenvolvedores entusiasmados dispostos a compartilhar conhecimento. Além disso, o Deno 1.28 trouxe compatibilidade aprimorada com pacotes npm, facilitando a adoção por quem migra do Node.js.
Veja quantas perguntas foram marcadas com cada runtime no Stack Overflow (em dezembro de 2024):
Runtime | Perguntas marcadas |
Node.js | 475028 |
Deno | 1105 |
Bun | 264 |

Todos os anos, é realizada uma pesquisa com desenvolvedores chamada State of JavaScript. Uma das perguntas é quais runtimes os participantes usam regularmente, e quase 30 mil pessoas responderam. Os resultados da pesquisa de 2022 também mostram o Node.js como líder isolado, com o Deno atrás, somando cerca de 5,3 mil votos, e o Bun com aproximadamente 1,2 mil.
Os resultados da pesquisa State of JavaScript 2024 mostram como o Bun avançou rapidamente, ultrapassou o Deno e agora é claramente a segunda opção, atrás do runtime Node.js:
A documentação oficial do Node.js inclui vários guias, uma ampla referência de API e informações para começar. Ela também traz informações sobre as dependências.
O site do Deno inclui um manual detalhado para ajudar você a conhecer o runtime e usá-lo nos seus projetos. Há também informações sobre a biblioteca padrão, que os desenvolvedores podem usar desde o início.
Estabilidade
Como opção consolidada, o Node.js oferece desempenho comprovado e é usado por 2,1% dos sites do mundo. Desde o lançamento da versão 1.0, em maio de 2020, o Node.js vem aprimorando a experiência de desenvolvimento sem abrir mão da estabilidade em cada versão, permitindo que desenvolvedores façam atualizações com pouco ou nenhum impacto.
Atualmente, o Bun está na versão 1.1.42 e lança novas versões em intervalos que podem ser de poucas semanas, adicionando recursos, correções e compatibilidade com o runtime principal do Node.js.
Segurança
A segurança pode ser vulnerável quando se trata do gerenciamento de dependências com npm, além das armadilhas comuns de segurança de aplicações criadas sobre o Node.js. Um dos motivos que levaram à criação do Deno foi oferecer um runtime mais seguro, com controles de acesso granulares a APIs sensíveis, como solicitações de rede, operações no sistema de arquivos e outros recursos essenciais. O Node.js não fica muito atrás nesse aspecto. O Node.js 20 introduziu um modelo de permissões com aspectos de segurança semelhantes aos do Deno.
Conhecer os erros comuns e as boas práticas do Node.js pode ajudar você a criar uma aplicação Node.js segura.
O Deno reduz algumas das preocupações de segurança inerentes ao Node.js ao exigir permissões explícitas para certas ações executadas pela aplicação. Por exemplo, para permitir que sua aplicação leia arquivos do sistema, você precisa iniciá-la com a flag --allow-read. Confira a lista completa na documentação sobre permissões. Você também pode interagir com esse sistema de permissões durante a execução para solicitar e revogar permissões por meio de código. Tenha cuidado com os subprocessos ao usar a flag --allow-, pois eles não estão sujeitos às mesmas restrições de segurança do processo Deno e podem invalidar o sandbox de segurança do Deno, levando à elevação de privilégios.
Recursos adicionais
O Node.js introduziu alguns recursos para se aproximar das funcionalidades do Deno e do Bun. Agora, ele conta com um executor de testes integrado e inclui suporte experimental integrado a TypeScript.
O Deno inclui um inspetor de dependências e um formatador de código. A possibilidade de implantá-lo como um único executável também é uma vantagem. Ao configurar um servidor com o Deno, o método básico descrito na documentação envolve buscar código de outros locais. O código não parece muito mais complexo do que no Node.js, mas pode ser um pouco diferente, já que as dependências são carregadas por URL.
Veja um exemplo simplificado de código:
Entre os recursos adicionais do Bun estão um transpilador e um gerenciador de pacotes. Como o nome sugere, ele também inclui recursos de empacotamento, oferecendo funcionalidades que, de outra forma, exigiriam outra ferramenta, como Snowpack ou rollup.js. Ele também elimina código não utilizado por meio do seu minificador de JavaScript.
Se você usar o Bun para executar tarefas, a velocidade pode ser uma grande vantagem. Segundo o projeto, ele leva cerca de 5 milissegundos para iniciar, contra cerca de 25 milissegundos do Node.js. A diferença pode parecer pequena, mas, somada às várias tarefas executadas ao longo do tempo, pode acelerar bastante seu fluxo de desenvolvimento.
Você deve usar Bun, Deno ou Node.js?
O Bun é claramente o vencedor em velocidade, mas ainda recebe atualizações para melhorar a compatibilidade com o Node.js, então usá-lo em produção envolve riscos. Ele alcançará a estabilidade dos outros dois? Talvez. De qualquer forma, se você gosta de desafiar o status quo e quer superar a concorrência em velocidade, o Bun oferece essa oportunidade na maioria dos cenários.
A grande vantagem do Node.js é sua maturidade e o tamanho do seu ecossistema. Você encontrará muitos desenvolvedores que o conhecem. Já Deno e Bun têm o atrativo de serem mais recentes, o que sempre empolga os desenvolvedores.
Deno também oferece várias vantagens em relação ao Node.js. Seu conjunto de recursos torna o desenvolvimento mais fluido e facilita a criação de projetos complexos e de alta qualidade. É seguro e mais rápido que o Node.js, mas um pouco mais lento que o Bun.
Em geral, o Node.js ainda é a opção mais segura, com um histórico comprovado de sucesso. O Deno tem muitos pontos fortes: seus recursos modernos fazem dele uma boa escolha para desenvolvedores que querem criar algo novo. Já o Bun é a ferramenta ideal para quem prioriza a velocidade ou quer explorar as tecnologias mais recentes.
A Snyk prioriza a experiência do desenvolvedor
Descubra por que a experiência do desenvolvedor é tão importante e como os recursos mais recentes da Snyk tornam essa experiência mais simples e eficiente.



