تعرف على Bun: وقت تشغيل JavaScript لدورة حياة التطوير بأكملها

اخلاء مسؤولية | DISCLAIMER
تم تصميم Bun ، وهو عبارة عن وقت تشغيل JavaScript جديد تم تصميمه باستخدام محرك JavaScriptCore ، ليكون بديلاً مؤقتًا لتشغيل تطبيقات JavaScript و Typescript ، ليكون أداة شاملة لتجميع التعليمات البرمجية ونقلها وتشغيلها بسرعة البرق.
قال سومنر ، الذي صممه جاريد سومنر ، مهندس الواجهة الأمامية السابق في Stripe ، يهدف إلى “تشغيل معظم جافا سكريبت في العالم خارج المتصفحات ، وإدخال تحسينات على الأداء والتعقيد للبنية التحتية المستقبلية ، بالإضافة إلى إنتاجية المطورين من خلال أدوات أفضل وأبسط”. في مقابلة على YouTube ، أجراها ثيو براون ، الرئيس التنفيذي لشركة Ping Labs.
يعالج Bun حوالي ثلاث مرات طلبات HTTP في الثانية أكثر من Node.js عند عرض React من جانب الخادم. تم تضمين WebSocket و ReadableStream و fetch. يعتبر Bun أيضًا محولًا للترجمة ، لذا يعمل TypeScript و JSX خارج الصندوق. نظرًا لأن Bun تنفذ خوارزمية دقة وحدة Node.js ، تعمل حزم npm أيضًا.
قال سومنر: “لقد أصبت بالإحباط بسبب بطء كل شيء في جافا سكريبت وأعتقد ، بدلاً من ذلك ، أنني أعلم ، أن جافا سكريبت يمكن أن تصبح أسرع كثيرًا”.
التغلب على دورة التكرار البطيئة
كانت السرعة التي جلبت أولاً الحاجة إلى شيء جديد هي التي أدت إلى إنشاء كعكة. في ذلك الوقت ، كان Sumner يطور لعبة في Next.js لكنه أصيب بالإحباط من سرعة دورة التكرار. كان الحل الأول هو استخدام esbuild builder مع Next.js ولكن ذلك لم يحقق النتيجة التي كان يبحث عنها حتى بعد استخدام التقنيات للعمل مع المكونات الإضافية. كانت فكرة سومنر التالية هي بناء مجمّع ومحول ولكن في النهاية ، بنى وقت تشغيل يشتمل على مجمّع وناقل.
في المقابلة ، أوضح سومنر أنه كان يعلم أن JavaScript يمكن أن يكون أسرع ، بسبب تجربة لديه في كتابة كود أصلي في Objective-C. أظهرت سرعة سجل NSLog من Apple ، وهو ما يعادل Objective-C في JavaScript ، مدى سرعة الكتابة إلى الجهاز. لقد كانت نافذة نظرة ثاقبة على سير عمل محتمل أدى إلى إبطاء تطبيقات JavaScript.
بعد إلقاء نظرة على عدد من اللغات لبناء Bun ، هبطت سومنر في النهاية على Zig غير المعروف نسبيًا. ساعد نهج Zig في “comptime” metaprogramming على إبرام الصفقة. Comptime هو البرمجة الوصفية بناءً على تنفيذ التعليمات البرمجية في وقت الترجمة والتقييم البطيء.
في Zig ، يمكن للمبرمج تسمية متغير في وقت الترجمة مما يضمن للمترجم أن كل تحميل وتخزين للمتغير يتم تنفيذه في وقت الترجمة. بشكل أساسي ، يمكن لـ comptime تشغيل تعليمات برمجية عشوائية في وقت الترجمة. أوضح سومنر: “لقد جربته للتو وأدركت أن وقت الكمبيوتر سيكون أداة قوية بشكل لا يصدق لكتابة التعليمات البرمجية السريعة”.
قبل بون ، لم يكتب سومنر أبدًا سطرًا من التعليمات البرمجية في Zig. يعزو فائدة خادم الخلاف كأحد الأسباب التي جعلته قادرًا على كتابة Bun بالكامل في Zig.
يتم استخدام Comptime في المحلل المعجمي ، المسمى “lexer” ، وهو أحد أبطأ أجزاء التحليل لـ Bun. وتتمثل مهمتها في التكرار خلال كل النص لتحديد ما إذا كان الرمز المميز الحالي معرفًا صالحًا أم كلمة أساسية. بسبب وقت الكمبيوتر ، يستخدم Bun مجموعة بت تم إنشاؤها في وقت الترجمة. تعطي هذه العملية 2٪ زيادة في الأداء لـ Bun.
بالنسبة للتحديات التقنية ، التي كان هناك الكثير منها ، صرح سومنر على وجه التحديد ، “أحد الأشياء التي علمتني كثيرًا أثناء العمل على Bun هو كيفية قراءة رسائل الخطأ.” إنه يشير إلى أن الصياغة في رسائل خطأ Zig تبدو أكثر تشابهًا مع تلك الموجودة في المجمعين. على سبيل المثال ، كانت الكلمة المميزة ، والتي تُرى غالبًا في lexing أو التحليل ، شائعة جدًا في رسائل الخطأ التي كان يتلقاها.
تخطط Sumner للحصول على نموذجين على الأقل للإذن في المستقبل ، أحدهما هو إزالة الشفرة الميتة الثنائية. سيعمل هذا النموذج على تشغيل الميزات وإيقاف تشغيلها ، لذا إذا لم يتم استخدام ميزة في أحد التطبيقات ، فلن يكون لدى Bun الرمز. نظرًا لوجود أداء ناجح في كل مرة يتم فيها الوصول إلى إذن ، سيكون هناك عدد أقل من نتائج الأداء اعتمادًا على عدد الميزات التي تم إيقاف تشغيلها.
في الوقت الحالي ، يوصي سومنر باستخدام Railway أو fly.io كأفضل خيارات النشر. سيكون هناك خيار مدمج ولكن من السابق لأوانه الحصول على أي تفاصيل إضافية. تعد واجهات برمجة تطبيقات Express ، و Angular ، و Jest تقنيات محددة يعمل سومنر على إضافة دعم مناسب ولكن على أطر عمل جافا سكريبت بشكل عام ، كما يقول ، “لن أقول إنني أتنافس مع أي إطار عمل لأنني أريد أن تستخدم كل هذه الأطر كعكة.”
هز البق
وأخيراً وليس آخراً ، الاختبار. كعكة جديدة ولديها أخطاء. سومنر على دراية بهذا الأمر ويعزو الفضل إلى عدم وجود اختبار واسع النطاق كأحد الأسباب التي تجعله شديد الأخطاء. يقول عن هذا ، “ليس لدى كعكة ما يكفي من التغطية الاختبارية وهذا هو السبب في أنها عربات التي تجرها الدواب”. يحتوي Bun على عداء اختبار JavaScript والأمر cli هو bun wiptest.
المطورون و Sumner على حد سواء متحمسون للغاية بشأن Bun وعلى الرغم من أنه لا يزال جديدًا ، إلا أن هناك آمالًا كبيرة عليه. قال سومنر ، “لقد أتيت من منظور” يحتاج إلى العمل قدر الإمكان مع النظام البيئي الحالي لأنه لا يجب على الأشخاص إعادة كتابة التعليمات البرمجية الخاصة بهم “ولكن ربما يجب أن أبدأ في التفكير أكثر حول ما إذا كنا نصنع / ما هي الأشياء الجديدة الممكنة لأن كعكة APIs تمكن “.






