Bun nhanh hơn Node.js? Nguyên nhân do đâu

Một người đã từng nói rằng: "Khi bạn bắt đầu ăn sử dụng Bun, Node.js sẽ trở nên nhạt nhẽo".

Nhưng tại sao điều đó lại liên quan? JavaScript đã trở nên nhanh hơn đáng kể với một môi trường thực thi JavaScript mới được gọi là Bun, mà hiện đã sẵn sàng cho sản xuất với phiên bản 1.0.

Nhưng tại sao và làm thế nào nó lại nhanh hơn Node.js? Bun là một công cụ nhanh chóng, toàn diện cho việc chạy, xây dựng, kiểm tra và gỡ lỗi JavaScript và TypeScript, từ một tệp đơn đến một ứng dụng full-stack.

Dưới đây là một số điều chúng ta có thể làm với Bun.

Chạy mã của bạn nhanh hơn với Bun

Bây giờ, chúng ta không cần các công cụ như npm, pnpm hoặc yarn nữa vì Bun nhanh gấp 17 lần. Hãy nhìn vào dữ liệu dưới đây:

Chạy mã của bạn nhanh hơn với Bun

Bun chỉ mất 0.36 giây để biên dịch mã của bạn, trong khi cần khoảng 6.44 giây trong trường hợp của pnpm, 10.58 giây với npm, và 12.08 giây với yarn.

Bun hỗ trợ hot reloading

Bun hỗ trợ hot reloading ngay từ đầu, vì vậy bạn không cần các công cụ như Nodemon. Nó sẽ tự động làm mới máy chủ khi chạy mã JavaScript hoặc TypeScript.

Bạn có thể thay thế npm run bằng bun run để tiết kiệm hơn 150ms mỗi khi bạn chạy một lệnh.

Dưới đây là biểu đồ đầy đủ:

Bun hỗ trợ hot reloading

Từ biểu đồ trên, sử dụng npm mất khoảng 176ms để chạy, yarn mất khoảng 131ms. Trong trường hợp của pnpm, mất khoảng 259ms. Tuy nhiên, chỉ mất khoảng 7ms trong trường hợp của Bun. Đó là nhanh chóng, phải không?

Bun là công cụ bundler JavaScript

Bun cũng là một công cụ bundler JavaScript với hiệu suất hàng đầu và một API plugin tương thích với ESBuild, vì vậy chúng ta không cần những thứ như:

  • ESBuild
  • Webpack
  • Parcel, .parcelrc
  • Rollup, rollup.config.js

Bun hiện đã hỗ trợ Next.js, Remix, Nuxt, Astro, SvelteKit, Nest, SolidStart, và Vite.

Bun hỗ trợ cả ESM và CommonJS Compatibility

Bun có tính năng tuyệt vời khác là chúng ta có thể sử dụng cả ES Modules và CommonJS trong cùng một tệp, điều này không thể thực hiện được trong Node.js.

Bạn có thể sử dụng import và require() trong cùng một tệp:

import lodash from "lodash";
const _ = require("underscore");

Ngoài ra, Bun có sự hỗ trợ tích hợp cho các API tiêu chuẩn Web có sẵn trong trình duyệt, như fetch, cùng với các API Bun bổ sung như Bun.file() để đọc một tệp một cách lười biếng và Bun.Write() để ghi một tệp vào hệ thống tệp cục bộ, điều này đơn giản hơn nhiều so với Node.js.

Ví dụ Bun.file()

const file = Bun.file("package.json");
const contents = await file.text();

Đoạn mã trên sẽ đọc nội dung của tệp package.json và chuyển nội dung đó vào một biến mới được gọi là contents.

Ví dụ Bun.write()

await Bun.write("index.html", "<html/>");
await Bun.write("index.html", Buffer.from("<html/>"));
await Bun.write("index.html", Bun.file("home.html"));
await Bun.write("index.html", 
await fetch("https://example.com/"));

Trong đoạn mã trên, Bun.write() sẽ viết chuỗi "<html/>", hoặc sao chép nội dung của tệp home.html vào tệp index.html. Nếu chúng ta cần lấy dữ liệu, nó sẽ lấy kết quả từ một API web bên ngoài và viết nội dung vào tệp index.html.

Tại sao Bun lại nhanh?

Bun nhanh vì nó sử dụng động cơ JavaScriptCore, trong khi Node.js sử dụng động cơ JavaScript V8. Động cơ trước đã được tối ưu hóa để khởi động nhanh hơn.

Tại sao Bun lại nhanh?

Nếu bạn muốn làm mọi thứ nhanh hơn, bạn nên xem xét thay thế Node.js bằng Bun.

Làm thế nào để bắt đầu với Bun?

Bạn có thể cài đặt Bun trên các hệ thống MacOS và Linux bằng npm:

npm install -g bun 

Bây giờ bạn đã sẵn sàng. Để cài đặt một gói npm, làm như sau:

bun install <tên-gói> 

Để bắt đầu một ứng dụng Next.js, làm như sau:

bun run dev 

Tất cả những gì bạn cần làm là thay thế npm bằng bun.

Tuy nhiên, Bun chỉ sẵn sàng cho môi trường production trên các hệ thống MacOS và Linux. Phiên bản Windows vẫn đang trong giai đoạn thử nghiệm. Hiện tại, chỉ hỗ trợ động cơ JavaScript cho Windows và không hỗ trợ trình quản lý gói, trình bundler hoặc trình chạy kiểm tra. Bạn có thể đọc thêm về điều đó ở đây.

Tóm lại, sự nhanh chóng của Bun so với Node.js có nguyên nhân chủ yếu là do Bun sử dụng động cơ JavaScriptCore, đã được tối ưu hóa cho thời gian khởi động nhanh hơn. Bằng cách này, Bun mang lại trải nghiệm phát triển JavaScript mạnh mẽ và hiệu quả hơn cho các nhà phát triển, đặc biệt là trên các hệ thống MacOS và Linux. Tuy nhiên, việc hỗ trợ cho Windows vẫn đang trong giai đoạn thử nghiệm, và Bun đang không hoàn toàn sẵn sàng cho môi trường sản xuất trên nền tảng này.