24:03Vercel
Log in to leave a comment
No posts yet
تُشبه تطبيقات الويب الحديثة على مستوى المؤسسات الوحوش الكاسرة. في المشاريع الضخمة التي يتجاوز عدد وحداتها (Modules) عشرات الآلاف، يواجه المطورون اختناقاً في عملية البناء (Build) لدرجة قد تسمح لهم باحتساء كوب من القهوة مع كل تعديل بسيط في الكود. هذا التأخير ليس مجرد وقت انتظار، بل هو عامل مدمر للإنتاجية يكسر حالة التركيز الإبداعي (Flow) لدى المطور.
تعتمد أداة Webpack، التي كانت المعيار السائد، على بنية خطية تقوم بتحميل مخطط الاعتمادية (Dependency Graph) للمشروع بالكامل في الذاكرة، ثم تعيد استكشاف الوحدات ذات الصلة عند كل تغيير. ومع نمو حجم المشروع، يزداد وقت الاستكشاف بشكل طردي. ولحل هذه المشكلة من جذورها، قدمت شركة Vercel مع إصدار Next.js 16 أداة Turbo Pack المبنية لغة Rust. السر ليس فقط في تغيير لغة البرمجة إلى Rust، بل في تقديم بارادايم جديد يعتمد على البرمجة التفاعلية والتراكمية. دعونا نغوص في أعماق Turbo Pack.
فلسفة Turbo Pack واضحة: المهمة التي أُنجزت مرة واحدة لا تُكرر أبداً. ولتحقيق ذلك، تستخدم Turbo Engine الذي يدير عملية البناء بأكملها كمجموعة من الدوال النقية (Pure Functions) عالية التجريد.
أساس Turbo Engine هو Value Cells. وهي عبارة عن حاويات، تشبه خلايا برنامج Excel، تحتوي على النتائج المرحلية لعملية البناء (مثل AST، ميتاداتا الوحدات، نتائج تحويل الأنماط، إلخ). عندما تقرأ دالة معينة خلية (Cell)، يسجل النظام علاقة الاعتماد في الوقت الفعلي. وبفضل التتبع المتأخر (Lazy Tracking)، حيث لا تتشكل الاعتمادات إلا عند استخدام البيانات فعلياً، يتم منع إبطال البيانات غير الضرورية من المصدر.
في التطبيقات الضخمة، ليس من الممتع أن تؤدي مراجعة تعليق (Comment) واحد إلى إعادة تحميل الصفحة بالكامل. تحل Turbo Pack هذه المشكلة باستخدام خوارزمية Red-Green.
على سبيل المثال، في دالة extract_imports لـ Turbo Pack، حتى لو قمت بتعديل 1000 سطر من المنطق داخل الدالة، طالما لم تتغير قائمة الوحدات المستوردة، ستتوقف الأداة ولن تعيد تنفيذ مراحل التجميع (Chunking) اللاحقة.
عند إدارة الملايين من عقد الاعتمادية، يكون التمرير البسيط (Traversal) عدواً للأداء. تعمل Turbo Pack، إلى جانب مخطط الاعتمادية الدقيق، على تشغيل مخطط تجميع (Aggregation Graph) يلخص هذه الاعتمادات بشكل هرمي.
كلما صعدنا إلى الطبقات العليا، يتم تجميع وإدارة معلومات العقد الدنيا بشكل مكثف. لذا، عند البحث عن أخطاء أو نتائج Lint للمشروع بالكامل، بدلاً من فحص ملايين العقد، يتم التحقق فقط من ملخص العقدة الجذرية العليا. هذا يحدث فرقاً حاسماً في تقليل التعقيد الزمني من إلى .
بعيداً عن النظريات، تُظهر الأرقام الفعلية تفوق Turbo Pack بوضوح. في بيئة مؤسسية حقيقية تحتوي على أكثر من 80,000 وحدة، يتم الانتقال بين الصفحات بشكل فوري تقريباً.
| المؤشر الرئيسي | Webpack (قديم) | Vite (v6) | Turbo Pack |
|---|---|---|---|
| بدء تشغيل السيرفر (Cold) | 10 - 60s+ | 1 - 3s | 1 - 3s (تفوق في القابلية للتوسع) |
| HMR (عند تعديل الملف) | 500 - 2000ms+ | 100 - 500ms | 10 - 50ms |
| بناء 10 آلاف مكون | يستغرق دقائق | 14s | أقل من 4s |
| استهلاك الذاكرة | 1.5GB - 2GB+ | 200 - 500MB | 200 - 400MB |
مع استقرار التخزين المؤقت لنظام الملفات، وصلت نتائج تقليص وقت التشغيل البارد (Cold Start) عند إعادة تشغيل سيرفر التطوير من 15 ثانية إلى 1.1 ثانية فقط، وهو ما يعادل تسريعاً بنحو 14 ضعفاً.
كل أداة قوية لها ضريبة. قبل اعتماد Turbo Pack، يجب فحص ثلاث نقاط:
webpack() معقدة في next.config.js فعليك الحذر. تدعم Turbo Pack فقط واجهات برمجة تطبيقات اللودر (Loader API) الأساسية، وقد لا تتوافق مع اللودرات الخاصة.NEXT_TURBOPACK_TRACING=1 لتحليل ملفات التتبع (Trace files) الناتجة.process.env.VARIABLE. الطرق التي تجمع الأسماء ديناميكياً تحمل مخاطر عالية للسقوط أثناء مرحلة التحليل.في حالات نادرة، قد تحدث حلقة تجميع لا نهائية بسبب الاعتمادات الدائرية (Circular References). لا داعي للذعر؛ الحل الأمثل هو حذف مجلد .next في جذر المشروع ثم إعادة التشغيل لتصفير التخزين المؤقت.
تجاوزت Turbo Pack مجرد كونها منافساً في سرعة أدوات الحزم (Bundlers)، لتعلن عن تجريد جديد للبنية التحتية لتطوير الويب. من خلال إكمال بنية "ادفع مقابل ما تعدله فقط" عبر النموذج التفاعلي، أصبح بإمكان المطورين التركيز فقط على منطق الأعمال وتجربة المستخدم، دون التقيد بحدود الأدوات. سرعة البناء لم تعد مجرد رقم، بل هي ميزة تنافسية محورية تحدد مرونة الفريق وسعادة المطور. جرب الآن زراعة هذا القلب الجديد في مشروعك الضخم عبر الأمر next dev --turbo.