Daftar Isi:
Teknologi JavaScript semakin pesat berkembang, salah satunya yang sedang naik daun adalah Bun. Bun merupakan sebuah runtime JavaScript yang dikembangkan dengan menggunakan bahasa pemrograman Zig dan juga JavaScriptCore. Bun diklaim lebih Segera dan lebih ringan dari NodeJS. Tapi apa sebenarnya Bun dan bagaimana Metode kerjanya?
Apa Itu Bun.js?
Bun adalah sebuah runtime JavaScript yang diklaim lebih Segera dan lebih ringan dari NodeJS. Bun sendiri dikembangkan oleh Jarred Summer yang merupakan Mempunyai pengalaman dibidang Frontend Engineer dan sekarang Konsentrasi mengembangkan Bun. Bun dikembangkan menggunakan teknologi yang berbeda dengan NodeJS, sehingga Bun dapat memberikan performa yang lebih Bagus.
Bun sendiri ditulis menggunakan bahasa pemrograman Zig dan juga didukung oleh JavaScriptCore yang Membangun performa Bun lebih Segera.
Tujuan dari Bun ialah Dapat menjalankan aplikasi server-side JavaScript dengan performa yang lebih Bagus dibandingkan NodeJS, sehingga Dapat meng-improve performa, mengurangi complexity, dan meningkatkan developer productivity.
Arsitektur Bun
Secara sederhana, arsitektur Bun terdiri dari beberapa komponen, diantaranya adalah:
- Execution runtime: Komponen ini bertugas Kepada menjalankan kode JavaScript, komponen ini terdiri dari JavaScriptCore yang bertugas Kepada menjalankan kode JavaScript, dan juga Core Module APIs yang bertugas Kepada menyediakan API yang dibutuhkan oleh aplikasi.
- Package manager: Komponen ini bertugas Kepada mengelola dependensi aplikasi, komponen ini terdiri dari Package Manager yang bertugas Kepada mengelola dependensi aplikasi, dan juga Dunia Install Cache yang bertugas Kepada menyimpan dependensi yang sudah di-download.
- Builder/Transpiler: Komponen ini bertugas Kepada mengubah kode TypeScript menjadi JavaScript, komponen ini terdiri dari TypeScript Compiler yang bertugas Kepada mengubah kode TypeScript menjadi JavaScript, dan juga Bundler yang bertugas Kepada menggabungkan beberapa file JavaScript menjadi satu file.
- Built-in TypeScript support: Bun mendukung TypeScript, sehingga kita Kagak perlu melakukan konfigurasi tambahan Kepada menggunakan TypeScript.
Fitur Bun
Terdapat beberapa fitur yang dimiliki oleh Bun, diantaranya adalah:
- NodeJS compatible: Bun kompatibel dengan NodeJS, sehingga aplikasi NodeJS dapat dijalankan di Bun tanpa perubahan.
- Fast running performance: Bun diklaim lebih Segera dari NodeJS, karena Bun menggunakan JavaScript Core yang lebih Segera dari V8, sehingga aplikasi yang dijalankan di Bun akan lebih Segera.
- Workspaces: Bun mendukung workspaces, yang memungkinkan developer Kepada mengelola dependensi dengan lebih Bagus pada monorepo.
- Dunia Install Cache: Ketika kita mendownload dependensi, Bun akan menyimpan dependensi tersebut di cache Dunia, sehingga ketika kita menginstall dependensi yang sama, Bun Kagak perlu mendownload dependensi tersebut Tengah.
- Built-in TypeScript support: Bun mendukung TypeScript out of the box, sehingga kita Kagak perlu melakukan konfigurasi tambahan Kepada menggunakan TypeScript.
- Secure by Default: Bun mengutamakan keamanan, sehingga Bun akan memblokir akses ke beberapa API yang berbahaya.
- Cross-platform: Bun dapat dijalankan di berbagai platform, seperti Linux, macOS, dan Windows.
Instalasi Bun
Kepada melakukan instalasi Bun pada sistem operasi Linux/MacOs/WSL, kita dapat menggunakan perintah berikut:
$ curl -fsSL https://bun.sh/install | bash
// Kepada versi yang lebih spesifik
$ curl -fsSL https://bun.sh/install | bash -s "bun-v1.1.13"
Kalau kita Mau melakukan instalasi Bun pada sistem operasi Windows, kita dapat menggunakan perintah berikut:
powershell -c "irm bun.sh/install.ps1|iex"
Kelebihan dan Kekurangan Bun
Terdapat beberapa kelebihan dan kekurangan yang dimiliki oleh Bun, diantaranya adalah:
Kelebihan Bun
- Lebih Segera: Bun diklaim lebih Segera dari NodeJS, sehingga aplikasi yang dijalankan di Bun akan lebih Segera.
- Less memory usage: Bun menggunakan memory yang lebih sedikit dibandingkan NodeJS, sehingga Bun lebih efisien dalam penggunaan memory.
- Built-in TypeScript support: Bun mendukung TypeScript out of the box, sehingga kita Kagak perlu melakukan konfigurasi tambahan Kepada menggunakan TypeScript.
- Faster package installation: Bun menggunakan teknologi yang berbeda dengan NodeJS, sehingga proses instalasi dependensi lebih Segera.
Kekurangan Bun
- Lagi baru: Bun Lagi dalam tahap pengembangan, sehingga Lagi mungkin terdapat bug atau isu lainnya.
- Kurangnya ekosistem: Bun Lagi kurangnya ekosistem dibandingkan NodeJS, sehingga mungkin Terdapat beberapa dependensi yang Kagak kompatibel dengan Bun.
- Kurangnya dokumentasi: Dokumentasi Bun Lagi kurang lengkap, sehingga mungkin sulit Kepada mencari informasi tentang Bun.
- Kurangnya komunitas: Komunitas Bun Lagi kecil, sehingga mungkin sulit Kepada mendapatkan Sokongan Kalau kita mengalami masalah.
Melakukan Benchmark Bun
Kepada melakukan benchmark Bun, kita akan menggunakan kode JavaScript yang cukup simple. Kode ini akan membaca file TXT yang berisi data nama dan Copot lahir yang Lagi terdapat duplikasi data dan kesalahan format, kemudian kita mengolah data tersebut Kepada mendapatkan data yang Spesial.
Kepada jumlah data-nya kita akan menggunakan 5 juta baris data dengan ukuran file 289MB, dengan spesifikasi VM ( GCP ) sebagai berikut:
- 2 vCPU + 4 GB memory (e2-medium)
- Ubuntu 22.04
- Disk 10 GB – Balance Persistent Disk
- NodeJS v18.20.3
- Bun 1.1.13
Berikut kode JavaScript yang akan kita gunakan:
const fs = require("fs");
const processFile = (filePath) => {
const content = fs.readFileSync(filePath, "utf8");
const lines = content.split("\n").slice(0, 5000000);
let baris = 0;
const words = [];
const uniqueWordsSet = new Set();
lines.forEach((line) => {
console.log(`Proses baris ke-${baris}`);
const columns = line.split(";");
if (columns.length 2) return;
const fullName = columns[0].replace(/"/g, "").split(",");
const firstName = fullName[1] ? fullName[1].trim() : "";
const lastName = fullName[0] ? fullName[0].trim() : "";
const birthdates = columns[1].split("/");
const birthdate = {
year: birthdates[0],
month: birthdates[1],
day: birthdates[2],
};
const wordObj = {
fullName: `${firstName} ${lastName}`,
firstName,
lastName,
birthdate,
};
const wordStr = JSON.stringify(wordObj);
if (!uniqueWordsSet.has(wordStr)) {
uniqueWordsSet.add(wordStr);
words.push(wordObj);
}
baris++;
});
return words;
};
const words = processFile("data.txt");
fs.writeFileSync("words.json", JSON.stringify(words, null, 2));
console.log("Berhasil menyimpan data ke dalam file words.json");
Kalau kita menggunakan NodeJS dengan menjalankan command time node main.js
, maka hasil benchmark yang kita dapatkan adalah sebagai berikut:
real 4m14.937s
user 3m14.671s
sys 1m3.863s
Yang artinya, proses tersebut membutuhkan waktu Sekeliling 4 menit 14 detik Kepada menyelesaikan proses tersebut.
Kalau kita menggunakan Bun dengan menjalankan command time bun main.js
, maka hasil benchmark yang kita dapatkan adalah sebagai berikut:
real 1m36.954s
user 0m36.953s
sys 0m56.480s
Yang artinya, proses tersebut membutuhkan waktu Sekeliling 1 menit 36 detik Kepada menyelesaikan proses tersebut.
Note: Hasl benchmark ini Kagak Dapat menjadi patokan yang Niscaya, karena hasil benchmark Dapat berbeda-beda tergantung dari spesifikasi hardware, software, dan kode yang digunakan.
Hasil
Biar Bun Lagi dalam tahap pengembangan, Tetapi Bun Mempunyai beberapa kelebihan yang cukup menarik, seperti lebih Segera, less memory usage, built-in TypeScript support, dan faster package installation. Dengan demikian, Bun Dapat menjadi alternatif yang menarik Kepada digunakan dalam pengembangan aplikasi NodeJS. Tetapi, kita juga perlu mempertimbangkan kekurangan Bun, seperti Lagi baru, kurangnya ekosistem, kurangnya dokumentasi, dan kurangnya komunitas. Oleh karena itu, sebaiknya kita melakukan Pengkajian lebih lanjut sebelum menggunakan Bun dalam pengembangan aplikasi kita.