Authors

Apr 1, 2023

Mengenal runtime "Bun", akankah menyingkirkan Node.js dan Deno?

Cover

Banyak orang yang sudah mengenal runtime javascript terpopuler yaitu Node.js yang memiliki sekitar 94 ribu bintang pada repositori GitHub Node.js saat tulisan ini dibuat. Node.js hadir sejak tahun 2009 dan dibangun menggunakan engine javascript v8. Setelah 15 tahun, Node.js menjadi pelopor runtime javascript yang berjalan diluar browser, hadirlah runtime baru bernama Bun. Saat kemunculannya nama Bun cukup ramai dibicarakan karena, Bun sendiri mengklaim bahwa runtime miliknya ini mampu menyaingi runtime yang sudah 15 tahun berjalan ini, bahkan bisa lebih cepat hingga lebih dari dua kali lipat yang Node.js mampu lakukan. Bun tidak menggunakan engine v8 melainkan menggunakan engine JavascriptCore, jadi Bun ini dibangun dengan inti dari Javascript yang membuat Bun ini lebih cepat dibandingkan Node.js yang menggunakan engine v8.

Singkat Cerita Bun

Bun ini ditemukan oleh seseorang bernama Jarred Sumner, seseorang Frontend Engineer di salah satu platform pembayaran global Stripe. Pada awalnya, Sumner sedang mengembangkan sebuah game dengan teknologi Next.js, akan tetapi dia frustasi karena kecepatan dari siklus iterasi yang dihasilkan tidak sesuai harapan. Kemudian dia menemukan solusi pertama dengan menggunakan esbuild builder yang diracik dengan si Next.js ini, tetapi hal tersebut tidak memberikan hasil yang memuaskan. Kemudian si Sumner berfikir kembali bagaimana bisa meningkatkan siklus iterasi, dan akhirnya menemukan ide untuk membuat bundler dan sebuah transpiler. Dalam pikirnya si Sumner, kenapa ga sekalian aja membuat runtime yang sudah termasuk bundler dan transpiler di dalamnya.

Kamudian Sumner mencari referensi bahasa pemrograman yang bisa digunakan untuk membuat Bun. Setelah melihat dan menimbang bahasa pemrograman yang digunakan, akhirnya Sumner memutuskan untuk memilih Zig, padahal bahasa ini tidak begitu populer. Beberapa konsep yang digunakan pada Zig sejalan dengan pemikiran Sumner yang ingin mengejar kecepatan dalam siklus iterasi dalam pengeksekusian proses data. Zig menggunakan pendekatan "comptime" metaprograming untuk mencapai harapannya. Dalam konsepnya Sumner melakukan optimasi dalam waktu startup, dan juga penggunaan memori.

Bun Report

Memulai dengan Bun

Saat tulisan ini dibuat memang bun masih dalam versi 0.4.0 (beta) yang artinya Bun masih dalam tahap pengembangan.

Namun bagi kalian yang ingin mencoba kecepatan dari bun, maka tidak ada salahnya untuk menginstall Bun. Untuk menginstallnya, berdasarkan website resminya Bun hanya dapat diinstal menggunakan bash script, dan script ini akan mendownload Bun dari github. Jalankan kode berikut pada terminal:

curl -fsSL https://bun.sh/install | bash

Catatan: Untuk menginstal Bun di Windows kalian memerlukan WSL untuk menjalankan perintah CURL

Setelah Bun terinstall, kita dapat membuat sebuah server HTTP standar dengan Request dan Response.

// http.js
export default {
  port: 3000,
  fetch(request) {
    return new Response("Welcome to Bun!");
  },
};

Kemudian jalankan dengan Bun di terminal.

bun run http.js

Taraaa! Server kalian sudah siap, untuk melihatnya buka http://localhost:3000 di browser kalian.

Perintah Bun

Berikut beberapa perintah yang terdapat pada Bun

bun run

Layaknya npm run perintah ini akan menjalankan kode JavaScript ataupun TypeScript dengan runtime JavaScript Bun yang terdapat pada package.json "scripts". Bun menklaim bahwa menjalankan kode JavaScript dengan bun run lebih cepat 30 kali daripada menggunakan npm run

Replace npm run with bun run and save 160ms on every run

bun install

Seperti npm install perintah akan menginstall package-package yang dibutuhkan. Perintah ini juga sudah mendukung semua package yang ada di npm.

Replace yarn with bun install and get 20x faster package installs

bunx <command>

Otomatis akan menginstall dan menjalankan program/perintah baik dari lokal ataupun package dari npm.

Replace npx with bunx and get 100x faster startup times for local packages.

bun test

Perintah ini akan melakukan testing kepada kode JavaScript atau TypeScript kita. Runner seperti Jest sudah termasuk dalam program Bun.

Sekian informasi yang bisa saya sampaikan, semoga bermanfaat.

Terimakasih ^^