Giới thiệu về Bun
Bun là gì?
Bun là công cụ giúp bạn Phát triển, thử nghiệm, chạy và đóng gói các dự án JavaScript & TypeScript, cũng như quản lý các package như Node.js nhưng với hiệu suất cao hơn
Lịch sử của Bun
Trước những thiếu sót của Node.js, nhà sáng lập Zig và tổ chức JavaScriptCore đã xây dựng nên Bun vào năm 2022 và nó đã nhanh chóng trở thành toolkit được yêu thích bới các lập trình viên trong các ứng dụng JavaScript.
Ưu điểm của Bun
1 - Tích hợp tất cả trong Bun
Bun sẽ tích hợp các package cần thiết, thay vì cài đặt quá nhiều các gói package hỗ trợ trong Node.js nay bạn chỉ cần sử dụng Bun là đủ.
Ví dụ: để đọc file .env thì node.js cần cài đặt thêm dotenv, cross-env nay đã tích hợp vào bun
Bun sẽ hỗ trợ Transpilers với các định dạng khác nhau như: .js, .ts, .cjs, .mjs, .jsx, .tsx. Từ đó bạn không cần phải cài đặt các package như tsc, babel, ts-node ...
Hỗ trợ Bundlers mạnh mẽ thay cho các package esbuild, webpack, parcel ... giúp trình đóng gói ứng dụng JavaScript nhanh hơn
Bun là có đính kèm trình quản lý gói tương thích với npm với các lệnh quen thuộc. Nó có thể đọc package.json của ứng dụng và ghi vào node_modules, giống như các trình quản lý gói khác, vì vậy bạn có thể thay thế: npm, yarn, lerna, pnpm
Bun còn là một trình chạy thử nghiệm tương thích với Jest với sự hỗ trợ cho snapshot testing, mocking và code coverage, do đó bạn không còn cần: jest, ts-jest, vitest
2 - Cải thiện hiệu suất trong JavaScript runtime
Khả năng tương thích bun với các dự án đang sử dụng Node.js là gần như hoàn thiện. Bun cũng thừa nhận là không thể tương thích hoàn toàn nhưng hầu hết là vẫn tương thích với các Node APIs như module fs, path, net ...
Bạn có thể check khả năng tương thích Node.js ở đây
Tốc độ là một thứ cần thiết cho mọi dự án, Bun giúp cải thiện tốc độ nhanh hơn 4 lần so với dự án Node.js thông thường
Để có tốc độ nhanh, bun đã sử dụng Webkit của Apple thay cho V8 engine của Google
Bun đã hỗ trợ một trình biên dịch runtime, cho nên bạn có thể chạy các file ts, tsx và jsx ngay lập tức mà không cần hỗ trợ từ module nào
bun index.ts
bun index.jsx
bun index.tsx
Tương thích với ESM & CommonJS module được Bun hỗ trợ mà không cần lo lăng về phần mở rộng của file .js hay .css, m.js... trong package.json. Thậm chí bạn có thể import và require cùng một file
import lodash from "lodash";
const _ = require("underscore");
Bun cũng tích hợp hỗ trợ Web APIs như fetch, Request, Response, WebSocket, ReadableStream... Do đó bạn không cần node-fetch và ws như trong Node.js
const response = await fetch("https://example.com/");
const text = await response.text();
Bun hỗ trợ Hot Reloading giúp lập trình viên nhanh chóng hơn trong thời gian phát triển ứng dụng, khi chỉ cần thêm option --hot
bun --hot server.ts
Không giống như nodemon, Bun có thể tải lại code mới của bạn mà không cần chấm dứt process cũ, nghĩa là kết nối HTTP và WebSocket không bị ngắt.
Xem thêm các ưu điểm khác của Bun
So sánh Bun vs Deno vs Node
Bun vs Deno
Bun vs Node
So sánh thêm và xoá packages giữa Bun vs NPM
Tool | Add Webpack (10 runs) | Remove We pack (10 runs) |
---|---|---|
npm | 1900 ms | 4200 ms |
Bun | 100 ms | 200 ms |
So sánh run test giữa Bun vs NPM
Command | Mean elapsed time (50 runs) |
---|---|
npm run test |
1.208 ± 0.011 |
bun run test |
1.046 ± 0.030 |
Copy lượng lớn file Bun vs Deno vs Node
Tool | Mean [s] (20 runs) | Min [s] | Max [s] | Relative |
---|---|---|---|---|
Bun | 1.222 ± 0.158 | 1.027 | 1.556 | 1.00 |
Deno | 1.276 ± 0.132 | 1.102 | 1.614 | 1.04 ± 0.17 |
cp | 1.802 ± 0.714 | 0.451 | 3.304 | 1.47 ± 0.61 |
Node | 4.003 ± 0.145 | 3.860 | 4.590 | 3.27 ± 0.44 |
So sánh HTTP server giữa Bun vs Deno vs Node
Runtime | RPS | Total time (2M requests) |
---|---|---|
Bun | 70966 | 28.18 seconds |
Deno | 40404 | 49.50 seconds |
Node | 33814 | 59.14 seconds |
Tốc độ triển khai CI/CD với Bun vs npm
Runtime | Average pipeline run (33 runs) |
---|---|
npm | 3 minutes 46 seconds |
Bun | 3 minutes |
So sánh ở trên có thể thấy Bun thực sự rất nhanh, nhưng mà Bun thay thế cho Node.js hay Deno là điều không chắc. Vì Deno cũng đã cố gắng làm điều đó nhưng đến nay Node.js vẫn tồn tại
Nhược điểm của Bun
Vì Bun mới nên document hiện tại rất ít sẽ gây khó khăn cho các lập trình viên
Hiện tại đã hỗ trợ trên win nhưng vẫn chưa ổn định như trên macos hay linux
Bun vẫn chưa tương thích 100% với Node, do đó không phải tất cả các dự án Node.js nào cũng chuyển qua dùng Bun được