Đội ngũ nòng cốt của pnpm đang triển khai bản viết lại dựa trên Rust cho phiên bản v12, giúp cắt giảm thời gian warm install từ 381 ms xuống còn 12 ms và clean install từ 6,5 s xuống còn 2,2 s. Sự gia tăng tốc độ này có ý nghĩa quan trọng nhất đối với các nhà phát triển chạy các gói trong các đường ống tích hợp liên tục (CI), nơi mà mỗi giây đều rất đáng giá.
Tại sao việc viết lại lại quan trọng vào lúc này
pnpm vốn đã vượt xa nhiều đối thủ về tốc độ, nhưng nó chạy trên Node.js, điều này buộc phải tốn một khoảng chi phí khởi động mỗi khi lệnh được thực thi. Chi phí đó biểu hiện dưới dạng một khoảng tạm dừng đáng kể trong các tác vụ CI vốn phải liên tục lấy và liên kết các phụ thuộc (dependencies). Bằng cách chuyển các tác vụ nặng sang một tệp thực thi (binary) Rust gốc—có mã hiệu là pacquet—đội ngũ phát triển đã loại bỏ quá trình khởi động (bootstrap) của Node.js và để Rust xử lý sự thay đổi lớn của hệ thống tệp chỉ với một luồng duy nhất.
Bản viết lại này là một bản chuyển đổi (port), không phải là một bản thiết kế lại. Tất cả các cờ (flags), định dạng tệp khóa (lockfile) và cấu trúc node_modules quen thuộc vẫn được giữ nguyên, vì vậy các kịch bản (scripts) và quy trình làm việc hiện có không cần thay đổi. Trong phiên bản v11, bạn đã có thể tùy chọn sử dụng backend pacquet; còn v12 sẽ biến nó thành mặc định cho việc lấy và liên kết.
Những cải thiện hiệu suất có thể đo lường được
Các kết quả benchmark do đội ngũ duy trì cung cấp cho thấy:
- Warm install (chạy lại với bộ nhớ đệm): 381 ms → 12 ms, cải thiện gấp 30 lần.
- Clean install (không có bộ nhớ đệm): 6,5 s → 2,2 s, cắt giảm hơn một nửa thời gian.
Rủi ro và sự đánh đổi
Công cụ (engine) Rust vẫn đang ở giai đoạn alpha. Đội ngũ khuyến cáo không nên sử dụng v12 trong môi trường production cho đến khi nó vượt qua giai đoạn tiền phát hành (pre-release).
Cách dùng thử ngay hôm nay
Các nhà phát triển có thể kiểm tra backend mới bằng cách chạy lệnh pnpm self-update next-12, lệnh này sẽ tải về tệp thực thi tiền phát hành mới nhất. Lệnh này thay thế engine JavaScript bằng engine Rust mà không làm thay đổi tệp pnpm-lock.yaml hay cấu trúc node_modules của dự án. Các nhóm muốn đánh giá tác động lên đường ống CI của mình nên khởi tạo một runner tạm thời, kích hoạt backend pacquet và so sánh thời gian build với thiết lập hiện tại.
Xu hướng rộng lớn hơn
Bước đi của pnpm phản ánh một làn sóng chuyển dịch các công cụ sang các ngôn ngữ biên dịch. Các dự án như Biome, Oxc và Deno đều đã xây dựng lại các thành phần quan trọng về hiệu suất bằng Rust hoặc Go để giảm thiểu độ trễ trong quy trình làm việc của nhà phát triển.
Những điều cần theo dõi tiếp theo
- Các cột mốc về độ ổn định: Theo dõi các bản phát hành sẽ cho biết khi nào nó an toàn để sử dụng trong production.
- Sự tương đồng về tính năng: Người dùng nên theo dõi nhật ký thay đổi (changelog) để biết về các khoảng trống tính năng.
Tóm lại: bản viết lại bằng Rust của pnpm biến một trình quản lý gói vốn đã nhanh trở thành một trình quản lý gần như tức thời đối với các lần cài đặt lặp lại, và cắt giảm hơn một nửa thời gian cho các lần cài đặt mới. Đối với các nhóm dành hàng phút để giải quyết các phụ thuộc mỗi đêm, bản nâng cấp này hứa hẹn giảm đáng kể chi phí CI mà không yêu cầu phải thay đổi toàn bộ quy trình làm việc.
