أصدر الفريق الأساسي لـ pnpm نسخة ألفا من الإصدار 12 تعمل كملف ثنائي (binary) أصلي بلغة Rust، مما يعد بأوقات تثبيت يمكن أن تكون أسرع بمقدار عشرة أضعاف من الإصدار الحالي القائم على Node.js. هذا التغيير مهم لأن مهام التكامل المستمر (CI) ستنتهي بشكل أسرع بكثير.
لماذا تهم عملية إعادة الكتابة هذه
يتميز pnpm بالفعل عن npm و Yarn باستخدام مخزن قابل للعنونة بالمحتوى (content-addressable store) وتنسيق node_modules صارم. ومع ذلك، لا تزال كل عملية تبدأ عملية Node.js، مما يتسبب في تكلفة تشغيل ثابتة قبل بدء أي عمل على الملفات. ومن خلال نقل الكود الذي يقوم بالمهام الثقيلة إلى Rust، يقضي الفريق على خطوة التمهيد (bootstrap) تلك ويستفيد من قدرة Rust على تشغيل العديد من عمليات الملفات بالتوازي، وهو أمر لا يمكن لخيط JavaScript واحد (single JavaScript thread) مضاهاته.
الأرقام وراء هذا الادعاء
تُظهر اختبارات الأداء (Benchmarks) التي قدمها فريق pnpm انخفاضات هائلة عبر ثلاثة سيناريوهات شائعة:
- التثبيت الدافئ (Warm install - تشغيل متكرر): من 381 مللي ثانية إلى 12 مللي ثانية.
- التثبيت بدون ذاكرة تخزين مؤقت (No-cache install): من 460 مللي ثانية إلى 40 مللي ثانية.
- التثبيت النظيف (Clean install - شجرة التبعيات الكاملة): من 6.5 ثانية إلى 2.2 ثانية.
إن تحسناً بمقدار 30 ضعفاً في عمليات التثبيت الدافئة يترجم مباشرة إلى مهام CI أسرع وحلقات تغذية راجعة أسرع للمطورين.
ما الذي سيبقى كما هو
عملية إعادة الكتابة هي عملية نقل (port) وليست إعادة تصميم. تظل جميع الأعلام (flags) الحالية، وتنسيق ملف القفل (lockfile)، وهيكل node_modules الصارم دون تغيير. يمكن للمشاريع الاستمرار في تشغيل pnpm install تماماً كما في السابق؛ والفرق الوحيد الملحوظ يجب أن يكون السرعة. ولأن واجهة برمجة التطبيقات العامة (public API) لا تتغير، فمن المفترض أن يكون مسار الهجرة (migration path) سهلاً وبدون عناء.
كيف تجربها الآن
الانتقال يتم على مراحل. في إصدار v11 الحالي، يمكن للمطورين اختيار استخدام الخلفية التجريبية لـ Rust عن طريق تفعيل علم الخلفية “pacquet”. وفي v12، سيصبح محرك Rust هو الافتراضي لجلب الحزم وربطها بمساحة العمل (workspace). تم نشر إصدار ألفا تحت الوسم next-12؛ ولا يُنصح باستخدامه في بيئة الإنتاج بعد، ولكن يمكن لأي شخص فضولي تثبيته بأمر واحد والبدء في الاختبار.
المخاطر والنقاط المقابلة
حتى مع وجود واجهة برمجة تطبيقات (API) نظيفة، فإن الملف الثنائي في مرحلة ألفا يحمل التحذيرات المعتادة: اختبار محدود واحتمالية حدوث تراجعات (regressions) في الحالات الاستثنائية.
الاتجاه الأوسع
تعكس خطوة pnpm نمطاً متزايداً بين أدوات الواجهة الأمامية (front-end tooling). فقد قامت مشاريع مثل Biome و Oxc أيضاً بإعادة كتابة المكونات الأساسية بلغات مجمعة (compiled languages) لاختصار أجزاء من الثانية من سير عمل المطورين.
