من المعروف أن تطبيقات الويب الحديثة تعمل على استغلال مزايا JavaScript أكثر مما كانت عليه قبل بضع سنوات. للقيام بذلك، قامت Mozilla بدورها بتطوير وإضافة مترجم جديد لرمز جافا سكريبت JavaScript إلى محرك عرض JavaScript المدمج في Firefox 70. ومع إطلاق Firefox 70 في أكتوبر القادم، تعلن Mozilla عن إدارة أفضل لرمز JavaScript باستخدام مترجم الشفرة الجديد الذي تمت إضافته إلى محرك JavaScript الخاص بها.

لتحقيق هذا الهدف، تشرح موزيلا أنه في محركات جافا سكريبت الحديثة، يتم تنفيذ كل وظيفة في البداية في مترجم الشفرة. يتم تصنيف الوظائف الأكثر تكرارا لتنفذ في رمز الجهاز الأصلي. وهذا ما يسمى تجميع JIT. بالنسبة إلى Firefox، يشتمل أيضًا على مترجم شفرات جافا سكريبت JavaScript مكتوب بلغة C ++ وعدة مستويات من تجميع JIT.

في البداية، لدينا أولاً برنامج مترجم JIT أساسي يقوم بتجميع كل تعليمة bytecode مباشرة في جزء صغير من كود الآلة باستخدام التخزين المؤقت المضمّن لأغراض الأداء وجمع المعلومات. مترجم JIT المسمى IonMonkey أو Ion بدوره، يستخدم برنامج التحويل البرمجي IonMonkey تحسينات متقدمة لإنشاء رمز سريع للخيارات الحرجة.

على الرغم من أن عملية تفسير شفرة JavaScript هذه قد نجحت جيدًا حتى الآن، فإن فريق Firefox يوضح أنه واجه بعض المشكلات في الجزء الأول من خط الأنابيب المكون من مترجم C ++ ومترجم JIT الأساسي.

في الواقع، تعمل بعض تطبيقات الويب الحديثة مثل محرّر مستندات Google أو Gmail على جافا سكريبت كثيرًا لدرجة أن المترجم الأساسي وحتى المترجم JIT يمكن أن يقضيان الكثير من الوقت في محاولة تجميع آلاف الوظائف. وكان أحد الحلول هو إخراجها من لائحة الانتظار، لكن ذلك كان يمثل مخاطرة في الأداء. لحل هذه المشكلات، أضافت Firefox خطوة جديدة تسمى Basic Interpreter إلى الائحة .

نظرًا لأن مطوري Firefox أرادوا أن يستخدم المترجم الأساسي نفس ذاكرات التخزين المؤقت ونفس المعلومات مثل JIT الأساسي، تمت إضافة بنية بيانات جديدة تسمى JitScript. يحتوي JitScript على جميع معلومات النوع وترابط بنيات بيانات التخزين المؤقت التي يستخدمها المترجمون الأساسيون والمترجم JIT. باستخدام هذه التطبيقات الجديدة، أصبحت بيانات برنامج التحويل البرمجي الأساسي لوظيفة ما الآن فقط في رمز الجهاز. من هناك، تم نقل جميع المعلومات المخزنة مؤقتًا وبيانات ملفات التعريف إلى JitScript.

بالإضافة إلى ذلك ، ولأن المترجم الأساسي ومترجم JIT متماثلان، يمكن أيضًا مشاركة الكثير من الشفرة التي تم إنشاؤها. للقيام بذلك، تم إنشاء فئة أساسية تسمى BaselineCodeGen مع فئتين مشتقتين أخريين. يتم استخدام فئة BalineCompiler الأولى بواسطة برنامج التحويل البرمجي الأساسي لتجميع رمز الشفرة للبرنامج النصي إلى رمز الجهاز. يتم استخدام BaselineInterpreterGenerator من الفئة الثانية لإنشاء رمز لمترجم أساسي. ومع فئة BaselineInterpreterGenerator، تمكن فريق Firefox من بناء مترجم أساسي.

شهد الإصدار 70 العديد من التحسينات : من حيث سرعة التحميل على سبيل المثال تمكن الفريق المرور من 2 إلى 8 ٪ من حيث التحسين. فيما يتعلق باستخدام الذاكرة، أبلغ مطورو Firefox أيضًا عن مكاسب في بصمة الذاكرة. وكشف اختبار مع محرّر مستندات Google أن المترجم الأساسي الجديد أسرع بكثير من مترجم C ++. وأخيرًا، يشير مطورو Firefox إلى أن وقت بدء تشغيل المترجم الأساسي أسرع بكثير من وقت مترجم C ++.

المصدر : موزيلا