Evento da Rocketseat junto da minha experiência com Bun
Bun para quem não conhece, é um runtime Javascript All-in-One, o que significa? É que ele faz tudo que o Node faz e um
pouco mais, ele tem sistema de testes, ele também tem o próprio gerenciador de pacotes (package manager) e é muito mais
rápido que npm
e yarn
, com a sua versão Bun 1.1, agora ele também está disponível para Windows, ele permite testes
dentro de sua própria aplicação, algo que o Node demorou um tempo para incrementar, e todos eram reféns do Jest ou
similares.
Claro que ele ainda utiliza algumas coisas do próprio Node, como o caso do node:fs
para deletar arquivos ou fazer
algumas necessidades, mas em comparação, ele já supera e muito o próprio Node pela absurda velocidade que ele vem
apresentando. Node é escrito em JavaScript, Python, C, C++ e CoffeeScript, enquanto Bun é escrito em Zig que para
muitos, além de ser uma experiência a um escopo bem pequeno, vem trazendo resultados absurdos em comparação e as imagens
- segundo o Bun - não mentem.
Vale lembrar que tanto Node, quanto Deno, ambos são escritos em cima do V8 do Chrome, enquanto o Bun, é escrito em cima do Javascript Core, que é o motor do Safari, o mesmo motor que é utilizado até mesmo no React Native - biblioteca de desenvolvimento mobile.
Node.js x Bun
Estou aproveitando que está acontecendo, nesse exato momento, o evento da Rocketseat e usarei como base apenas a primeira aula do evento. No evento, criaremos uma aplicação de eventos presenciais usando Node, mas gostaria de aproveitar o espaço e fazer o comparativo, já que estamos usando aplicativos reais para fazer o teste, o que é bem interessante para ver a questão do peso dessa briga - ao invés de apenas ver tempo de execução de looping, como já fiz anteriormente em fight-nodexbun.
No repositório mencionado, apenas testei a velocidade de instalação, a velocidade em adicionar novos módulos e a execução dele usando NextJS - framework de frontend - para ver como ambos se comportariam nessa situação. Claro que, esses dados são bem relativos, já que estava usando o Bun v1.0 e o Node v20.12 para fazer o comparativo, além do meu sistema operacional ser um Windows rodando em WSL, já que rodando em uma máquina Linux poderia trazer bem mais resultados significativos. Além do mais, aproveitando que se tratava de NextJS, utilizei também do turbopack no cenário do Node para ver seu comportamento e executar os testes.
Você pode ver todos os detalhes de como foi a "briga" lá no README.md do repositório.