pnpm chuyển sang Rust: Vì sao JavaScript không còn đủ nhanh?

04 tháng 9, 2026·4 phút đọc

Trình quản lý gói phổ biến pnpm đã được viết lại hoàn toàn bằng Rust trong phiên bản 12, giúp giảm tới 90% thời gian cài đặt gói, đặc biệt hữu ích cho các monorepo. Bản nâng cấp này hoàn toàn tương thích ngược, không thay đổi lệnh, cờ, cài đặt hay định dạng lockfile. Động thái này cho thấy xu hướng ngày càng nhiều công cụ JavaScript chuyển sang Rust để cải thiện hiệu suất.

pnpm chuyển sang Rust: Vì sao JavaScript không còn đủ nhanh?

Trình quản lý gói JavaScript pnpm, vốn đã nổi tiếng với tốc độ tải xuống nhanh, vừa tiếp tục cắt giảm thời gian cài đặt thêm tới 90% nhờ được viết lại hoàn toàn bằng Rust. Tuy nhiên, theo người duy trì dự án, việc nâng cấp lên phiên bản 12 mới phát hành sẽ không gây ra bất kỳ trở ngại nào cho người dùng.

"Việc nâng cấp không nên giống như một cuộc di cư. Tất cả lệnh, cờ, cài đặt và định dạng lockfile của pnpm 11 đều được giữ nguyên, và tài liệu bao gồm cả hai phiên bản," Zoltan Kochan, người dẫn dắt chính của dự án pnpm, chia sẻ.

Hiệu suất vượt trội so với các phiên bản cũ

Trong các bài kiểm tra benchmark của riêng dự án, pnpm 12 cài đặt một gói chưa được lưu trong bộ nhớ cache mẫu trong 5,19 giây, so với 8,22 giây mà pnpm 11 yêu cầu và 47,7 giây mà chính npm phải thực hiện.

Đội ngũ dự án cũng xây dựng một máy chủ registry bằng Rust, có tên là pnpr, giúp cải thiện hiệu suất hơn nữa. Trong thử nghiệm trên, việc cài đặt chỉ mất 3,37 giây khi sử dụng pnpr ở phía backend.

Vì sao lại là Rust?

Phần lõi nhị phân mới bằng Rust, được bắt đầu phát triển từ tháng 4, đã loại bỏ rất nhiều chi phí xử lý phát sinh từ việc điều hướng các hoạt động của hệ thống tệp qua Node.js. Theo thống kê trên GitHub, phiên bản mới này có 65,9% mã Rust và 33,5% mã TypeScript.

"Việc cài đặt gói bị chi phối bởi việc tìm nạp siêu dữ liệu và tarball, giải nén tệp, giải quyết biểu đồ phụ thuộc và liên kết các gói vào node_modules, khiến nó trở thành mục tiêu tự nhiên cho mã gốc và xử lý song song," Sarah Gooding, phó chủ tịch truyền thông của nhà cung cấp bảo mật Socket, viết trong một bài đăng trên blog.

Gooding cũng lưu ý rằng dự án đã so sánh pnpm với Bun và Yarn, nhưng kết quả đã bị xóa do sai sót trong quá trình kiểm thử. Tuy nhiên, cô nhấn mạnh phần mềm này đã cắt giảm thời gian cài đặt tới 90% trong một số trường hợp.

Một npm nhanh hơn

Nhà phát triển Rico Sta. Cruz ban đầu đã tạo ra pnpm vào năm 2016 như một giải pháp thay thế nhanh hơn cho npm (Node Package Manager), trình quản lý gói thực tế của JavaScript, được các nhà phát triển dùng để tìm và tải xuống các thư viện cũng như công cụ. GitHub đã mua lại phần mềm npm mã nguồn mở và kho lưu trữ của nó vào năm 2020.

Npm nổi tiếng là một công cụ chậm chạp và tốn nhiều dung lượng ổ đĩa, do có thói quen tải xuống tất cả các phụ thuộc cần thiết vào máy của người dùng, bất kể chúng có trùng lặp hay không.

Bí quyết của pnpm nằm ở bộ lưu trữ có địa chỉ nội dung. Nếu bạn cần một thư viện duy nhất cho 100 ứng dụng khác nhau, pnpm chỉ tải xuống nó một lần và chỉ tải xuống một bản sao khác nếu nhà phát triển chỉ định một phiên bản khác.

Giống như npm, pnpm vẫn lấy nguồn từ kho lưu trữ npm chính thức, nhưng được đánh giá là hoạt động tốt hơn npm đối với nhiều người. Nhiều nhà phát triển cũng thích khả năng đọc của lockfile — tệp mô tả cây phụ thuộc của gói — nhờ sử dụng YAML.

Khảo sát State of JavaScript 2025 cho thấy pnpm là trình quản lý gói phổ biến nhất cho các monorepo JavaScript, một nhóm cũng bao gồm Nx, Lerna, Yalc, Turborepo và cả Workspaces tích hợp của npm. Khoảng 38% (3.840) trong số 10.251 nhà phát triển được khảo sát đã sử dụng trình quản lý gói này.

Rust cho JavaScript

Việc viết lại các ứng dụng bằng Rust dường như là hoạt động ưa thích trong thời gian gần đây, vì ngôn ngữ này nổi tiếng với hiệu suất nhanh mà không bị cản trở bởi cơ chế thu gom rác.

Chỉ riêng trong hệ sinh thái ứng dụng web, framework Bun vừa có một cuộc đại tu bằng Rust với sự hỗ trợ của AI, Tailwind CSS phiên bản 4 đã có engine Rust mới có tên Oxide, và framework Vite giờ đây tăng tốc nhờ trình đóng gói JavaScript được xây dựng bằng Rust có tên Rolldown.

"Đây là một lời buộc tội Node về trải nghiệm nhà phát triển (developer experience) kém," Darcy Clarke, CEO của nền tảng quản lý gói JavaScript vlt, viết trên mạng xã hội X về việc viết lại pnpm bằng Rust.

"Việc viết lại pnpm bằng Rust còn nhanh hơn là di cư sang ESM (ECMAScript modules)," Kochan của pnpm đáp lại, đồng tình với quan điểm của Clarke.

Trang GitHub của phần mềm vẫn trỏ đến bản phát hành chính cuối cùng, pnpm 11.25, vì vậy người dùng hiện tại sẽ cần cập nhật lên nhánh v12 cụ thể bằng lệnh "pnpm self-update next-12".

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗