تیم اصلی pnpm در حال ارائه یک بازنویسی مبتنی بر Rust برای نسخه ۱۲ است که زمان نصب گرم (warm install) را از ۳۸۱ میلیثانیه به ۱۲ میلیثانیه و نصبهای تمیز (clean install) را از ۶.۵ ثانیه به ۲.۲ ثانیه کاهش میدهد. این افزایش سرعت بیش از همه برای توسعهدهندگانی اهمیت دارد که پکیجها را در خط لولههای یکپارچهسازی مداوم (CI) اجرا میکنند، جایی که هر ثانیه اهمیت دارد.
چرا این بازنویسی اکنون اهمیت دارد
pnpm در حال حاضر در زمینه سرعت از بسیاری از رقبای خود پیشی گرفته است، اما روی Node.js اجرا میشود که باعث میشود هر بار که دستور اجرا میشود، یک هزینه راهاندازی (startup cost) تحمیل شود. این هزینه خود را به صورت یک وقفه محسوس در کارهای CI که مکرراً وابستگیها را دریافت و لینک میکنند، نشان میدهد. با انتقال کارهای سنگین به یک باینری بومی Rust — که با نام مستعار pacquet شناخته میشود — تیم توسعه، فرآیند بوتاسترپ Node.js را حذف کرده و اجازه میدهد Rust تغییرات گسترده در سیستم فایل را تنها با یک رشته (single thread) مدیریت کند.
این بازنویسی یک پورت (port) است، نه یک بازطراحی. تمام پرچمها (flags)، فرمتهای فایل قفل (lockfile) و ساختار آشنای node_modules دقیقاً ثابت میمانند، بنابراین اسکریپتها و جریانهای کاری موجود نیازی به تغییر ندارند. در نسخه ۱۱، شما از قبل میتوانید از بکانند pacquet استفاده کنید؛ اما در نسخه ۱۲، این بکانند برای دریافت (fetching) و لینک کردن به حالت پیشفرض تبدیل میشود.
بهبودهای عملکردی قابل اندازهگیری
بنچمارکهای ارائه شده توسط نگهدارندگان نشان میدهد:
- نصب گرم (اجرای مجدد با کش): ۳۸۱ میلیثانیه ← ۱۲ میلیثانیه، یک بهبود ۳۰ برابری.
- نصب تمیز (بدون کش): ۶.۵ ثانیه ← ۲.۲ ثانیه، کاهش زمان به بیش از نصف.
ریسکها و ملاحظات
موتور Rust هنوز در مرحله آلفا است. تیم توصیه میکند تا زمانی که این نسخه از مرحله پیشانتشار خارج نشده است، از نسخه ۱۲ در محیط عملیاتی (production) استفاده نکنید.
چگونه همین امروز آن را امتحان کنیم
توسعهدهندگان میتوانند با اجرای دستور pnpm self-update next-12 که آخرین باینری پیشانتشار را دریافت میکند، بکانند جدید را آزمایش کنند. این دستور موتور جاوااسکریپت را بدون تغییر در فایل pnpm-lock.yaml یا ساختار node_modules پروژه، با موتور Rust جایگزین میکند. تیمهایی که میخواهند تأثیر آن را بر خط لولههای CI خود ارزیابی کنند، باید یک runner موقت را راهاندازی کرده، بکانند pacquet را فعال کنند و زمانهای ساخت (build times) را با تنظیمات فعلی مقایسه کنند.
روند گستردهتر
حرکت pnpm بازتابی از موج مهاجرت ابزارها به سمت زبانهای کامپایلشده است. پروژههایی مانند Biome، Oxc و Deno همگی اجزای حساس به عملکرد خود را در Rust یا Go بازسازی کردهاند تا تأخیر را در جریان کاری توسعهدهندگان کاهش دهند.
مواردی که باید در آینده زیر نظر داشت
- نقاط عطف پایداری: نظارت بر نسخههای منتشر شده مشخص میکند که چه زمانی استفاده از آن برای محیط عملیاتی ایمن است.
- برابری ویژگیها: کاربران باید برای بررسی وجود هرگونه شکاف در ویژگیها، چنگلیست (changelog) را دنبال کنند.
خلاصه کلام: بازنویسی pnpm با Rust، یک مدیریت پکیج که از قبل سریع بود را برای نصبهای مکرر به مدیری تقریباً آنی تبدیل میکند و زمان نصبهای جدید را به بیش از نصف کاهش میدهد. برای تیمهایی که هر شب دقایقی را صرف حل وابستگیها (dependency resolution) میکنند، این ارتقا وعده کاهش قابل توجه هزینههای CI را بدون نیاز به بازنگری کلی در جریان کاری میدهد.
