Bun benchmark received’t substitute Node but. It’s quick, although.
What’s your present JavaScript runtime, and why is it Node.js? However have you ever heard there’s a brand new resolution on the town? Bun is a local code bundler, transpiler, and process runner with a built-in npm consumer. The creators promised to meet our want for pace and prioritized Bun’s efficiency over all different options. On this article, I’ll present you the right way to begin an current Node.js mission on this new JavaScript runtime and examine if Bun is actually the quickest on the market.
First issues first, what’s JavaScript runtime?
A runtime atmosphere is the place your program will likely be executed. You are able to do it:
- by JavaScript engine built-in browser (V8 developed by the Chromium Mission for Google Chrome)
- on server environments (reminiscent of Node.js or Bun) that are de-facto implementations of a “browser” operating on the server.
There are few Javascript runtimes available on the market. As of writing this text, the highest three appear to be this.
Node.js
Node.js – the preferred (by GitHub stars), the oldest, however above all “the primary one”. Earlier than Node, JS existed solely within the browser, so we have now rather a lot to be thankful for.
At The Software program Home, we run our JS functions on Node.js, because it’s a longtime JS execution atmosphere. In reality, it’s the one one supported by AWS Lambda and GCP Features.
If you happen to’re right here, you undoubtedly know Node inside and outside, so let’s transfer on.
Deno
In second place there’s Deno. We’ve already made some makes an attempt to check out Deno and we actually gave it an opportunity. Sadly, we didn’t discover it convincing sufficient to maneuver to this nonetheless barely immature JS runtime.
Learn extra about our Deno experiences:
However the truth was a truth – a contest appeared. Now we have been curious ever since if one thing else than Node.js and Deno would fulfill JS builders’ hopes for tremendous quick JS functions.
After which Bun was baked in Oven!
What’s Bun?
As of writing, the third place is occupied by contemporary and crisp Bun – the most recent and fastest-growing JS runtime. Bun attracted a variety of consideration when it gained $7 million in funding in August 2022.
The complete Bun mission focuses on efficiency and being an all-in-one instrument (runtime, bundler, bundle supervisor, transpiler).
Within the “conventional” Node.js, you want the mixed energy of a few instruments to attain the identical targets: npm, Webpack, and so forth.
How is Bun imagined to be sooner than Node?
Aiming to spice up its efficiency, the Bun crew wrote it from scratch in Zig, a low-level C various. The browser engine operating JS code in Bun is predicated on JavaScript Core – the JS engine inside Safari that’s thought-about sooner than Node’s V8, the engine inside Chromium.
Bun ships and the event crew declare it’s sooner due to an unlimited period of time spent profiling, benchmarking, and optimizing issues. The final theme: Zig’s low-level management over reminiscence and lack of hidden management move makes it a lot simpler to put in writing quick software program.

In abstract, Bun creators declare that it serves 4 instances extra requests per second and packages are put in 30 instances sooner than by npm.

My time with Bun
After studying Bun creator’s assurances and neighborhood dialogue, I believed “that’s some massive claims”. I used to be curious if what they are saying is true. Is Bun actually that quick? Really sooner than Node.js?
I’ve already seen a number of benchmarks (and different tech options for that matter) that promised the world however hardly delivered, so I used to be not going to switch Node with none onerous knowledge. So I’ve performed what’s wanted to be performed: set up Bun and get the quantity with some efficiency testing.
Let’s transfer on to implementation.
Find out how to run your Categorical app with Bun?
To be able to take a look at Bun, I used The Software program Home’s do-it-yourself (or ought to I somewhat say “officemade”) Categorical Boilerplate. This boilerplate is extremely scalable and focuses on efficiency and greatest practices boilerplate code for Node.js and TypeScript apps.
If you wish to begin your Node.js tasks even sooner, right here’s an in depth overview of the TSH-original boilerplate:
So, to run Bun it is advisable to comply with these steps:
$ curl https://bun.sh/set up | bash
$ export BUN_INSTALL="$HOME/.bun"
$ export PATH="$BUN_INSTALL/bin:$PATH"
$ cd repo
$ cp docker-compose.override.yml.dist docker-compose.override.yml
$ cp .env.dist .env
$ bun i
$ bun run docker-build
$ bun run watch
$ bun run begin
As you may see, runs with no modifications.
Let’s examine Bun and Node!
1. Package deal set up time
The primary take a look at we’re operating is bundle set up time. We did a easy take a look at, to simulate real-life workflow.
- Npm run put in 1273 packages in 23 seconds,
- Bun run put in 1003 in 15,6 seconds.
🏆WINNER: BUN*
*Disclaimer: Bun certainly is 32% sooner, however the execution time it’s not as quick as Bun’s creator promised
2. Docker picture
The second factor to match is constructing the primary docker picture.
🏆WINNER: NPM
Utilizing Bun doesn’t appear to have an effect on Docker image-building time.
3. App-builder
Check quantity three will test how Bun and npm cope with beginning app-builder.
🏆WINNER: BUN
The distinction is so minimal that there’s no motive to change to Bun on objective.
4. Software begin time
The fourth factor we examine is the appliance begin time.
🏆WINNER: BUN
…however once more, the distinction is negligible.
Now, a very powerful. Is Bun sooner than Node?
Under, we’re testing easy get endpoint /well being
The instrument we use on this take a look at is WRK – a contemporary HTTP benchmarking instrument able to producing vital load when run on a single multi-core CPU.
In these assessments, we’re utilizing Node 16.15.0 and Bun 0.2.1.
Check 1. 10000 connections in 60 seconds with a variable variety of threads
🏆WINNER: NODE
Okay, honest sufficient. How about we tweak it up a bit with totally different parameters?
10 threads in 60 seconds, with a variable variety of connections
As you may see, relying on the variety of connections and the variety of threads the outcomes are comparable. However typically, Node.js is quicker. So…
🏆WINNER: NODE
Do you have to transfer from Node to Bun? Most likely not
I’ve acquired some excellent news and dangerous information.
The dangerous information: Bun will not be going to be a drop-in substitute for Node anytime quickly
For this text, I’ve used an current Node.js software. I can inform you that it’s not value operating your secure Node app on Bun. Despite the fact that there’s large potential and room for growth – for now, it’s simply too immature. Bun’s nonetheless new has no full documentation, and numerous errors could happen throughout implementation. Additionally, I’m fairly positive that within the foreseeable future it received’t be helpful in serverless options utilizing AWS Lambda, or Google Cloud Features (as of writing, Node.js is the one supported atmosphere). It’s going to take a while for Bun.js to develop and develop into a know-how that we will use in industrial tasks. At current, Bun’s tiny wins in pace assessments received’t compensate for the time misplaced if you happen to run into surprising errors.
If you happen to began a brand new self-hosted early-stage mission you should use Bun.js from the start and optimize it for working with Bun. Then, positive – go for it!
A small comfort for the Bun crew whereas they’re in all probability enhancing their resolution – you have already got the sweetest brand within the recreation. Simply look once more at how cute it’s!
The excellent news: Node.js will likely be compelled to innovate
Now, Node.js has not just one however two potential rivals available on the market. I guess the Node crew will likely be extra “motivated” to extend their product’s efficiency as a lot as they’ll.
I consider that these applied sciences will possible coexist within the ecosystem somewhat than one displacing the opposite, very like a number of JDK distributions have spawned within the Java world, one being chosen above one other largely for licensing causes. However figuring out the fast-changing world of JavaScript, quickly a brand new know-how will seem with the intention to take over the market.