تیم اصلی pnpm یک نسخه آلفای نسخه ۱۲ را منتشر کرده است که به عنوان یک باینری بومی Rust اجرا میشود و وعده میدهد که زمانهای نصب میتواند تا یک مرتبه بزرگی (order of magnitude) سریعتر از نسخه فعلی مبتنی بر Node باشد. این تغییر از این جهت اهمیت دارد که وظایف CI بسیار سریعتر به پایان خواهند رسید.
چرا بازنویسی اهمیت دارد
pnpm از طریق استفاده از یک ذخیرهساز محتوا-محور (content-addressable store) و ساختار سختگیرانه node_modules هماکنون خود را از npm و Yarn متمایز کرده است. با این حال، هر دستور همچنان یک فرآیند Node.js را راهاندازی میکند که پیش از شروع هرگونه کار روی فایلها، هزینهی ثابت راهاندازی (startup cost) را تحمیل میکند. با انتقال کدهای سنگین به Rust، تیم توسعهدهنده آن مرحلهی راهاندازی اولیه (bootstrap) را حذف کرده و از توانایی Rust در اجرای موازی بسیاری از عملیاتهای فایل استفاده میکند؛ چیزی که یک تکرشته (single thread) در JavaScript قادر به انجام آن نیست.
اعداد پشت این ادعا
بنچمارکهای ارائهشده توسط تیم pnpm، کاهش چشمگیری را در سه سناریوی رایج نشان میدهند:
- نصب گرم (اجرای مجدد): از ۳۸۱ میلیثانیه به ۱۲ میلیثانیه.
- نصب بدون کش: از ۴۶۰ میلیثانیه به ۴۰ میلیثانیه.
- نصب پاک (درخت وابستگی کامل): از ۶.۵ ثانیه به ۲.۲ ثانیه.
بهبود ۳۰ برابری در نصبهای گرم، مستقیماً به وظایف CI سریعتر و حلقههای بازخورد کوتاهتر برای توسعهدهندگان منجر میشود.
چه چیزهایی بدون تغییر باقی میمانند
این بازنویسی یک پورت (port) است، نه یک بازطراحی. تمام پرچمها (flags)، فرمت lockfile و ساختار سختگیرانه node_modules بدون تغییر باقی میمانند. پروژهها میتوانند دقیقاً مانند قبل دستور pnpm install را اجرا کنند؛ تنها تفاوت قابل مشاهده باید سرعت باشد. از آنجایی که API عمومی تغییر نمیکند، مسیر مهاجرت قرار است بدون دردسر باشد.
چگونه همین حالا آن را امتحان کنیم
این انتقال مرحلهبندی شده است. در نسخهی فعلی (v11)، توسعهدهندگان میتوانند با فعال کردن پرچمِ بکاِندِ “pacquet”، از بکاِند آزمایشی Rust استفاده کنند. در نسخه ۱۲، موتور Rust برای دریافت بستهها و لینک کردن آنها در ورکاسپیس (workspace) به حالت پیشفرض تبدیل میشود. نسخهی آلفا تحت تگ next-12 منتشر شده است؛ این نسخه هنوز برای استفاده در محیط عملیاتی (production) توصیه نمیشود، اما هر کسی که کنجکاو است میتواند با یک دستور ساده آن را نصب کرده و تست را شروع کند.
ریسکها و نکات متقابل
حتی با وجود یک سطح API تمیز، یک باینری آلفا با هشدارهای معمول همراه است: تست محدود و احتمال بازگشت به عقب (regression) در موارد خاص (edge-case).
روند گستردهتر
حرکت pnpm بازتابدهندهی الگوی رو به رشدی در میان ابزارهای فرانتاند است. پروژههایی مانند Biome و Oxc نیز مؤلفههای اصلی خود را با زبانهای کامپایلشده بازنویسی کردهاند تا میلیثانیهها را از گردش کار توسعهدهندگان کاهش دهند.
