Eu tenho um MacBook antigo (2012), processador 2.6 GHz Quad-Core Intel Core i7, e refiz o teste nele com as mesmas versões (Node 18.17.1 e Bun 1.0.1).
Agora a diferença foi bem maior no código que calcula Fibonacci. Primeiro com time
:
Node:
real 0m9.818s
user 0m9.412s
sys 0m0.443s
Bun:
real 0m33.275s
user 0m33.062s
sys 0m3.324s
E com o Benchmark.js:
Node:
test x 0.14 ops/sec ±1.67% (5 runs sampled)
Bun:
test x 0.03 ops/sec ±0.36% (5 runs sampled)
Já com o segundo código (console.log
dentro do loop), a situação se inverte e o Bun se mostra mais rápido. Primeiro com time
:
Node:
real 0m12.736s
user 0m10.322s
sys 0m1.732s
Bun:
real 0m5.140s
user 0m2.289s
sys 0m1.335s
E com o Benchmark.js:
Node:
test x 0.09 ops/sec ±0.15% (5 runs sampled)
Bun:
test x 0.21 ops/sec ±0.15% (5 runs sampled)
Provavelmente por causa do que já mencionei, de que a implementação do console.log
no Node piora bastante a performance. No primeiro código não causa problema porque é só uma chamada no final e o grosso do trabalho é no cálculo, mas no segundo já faz diferença.
Curiosamente, se não usar BigInt
, aí muda de novo:
// diminuí o n para não estourar o valor máximo de Number
let n = 1000;
let a = 0, b = 1;
for (let i = 0; i < n; i++) {
[a, b] = [b, a + b];
}
Usando este código, o Bun foi muito mais rápido que o Node, tanto no Mac quanto no Linux (em média cerca de 10 vezes mais rápido).
só que usando esse codigo tu nao chega em n
de 100.000 imagina 1.000.000 haha
BigInt parece ser uma limitação do bun atual, sobre o console.log
se nao me engano ele vai direto pra API nativa no V8, provavelmente aqui temos uma diferença do Zig no bun?