BinaryAST: مشروع من Cloudflare و Mozilla و Facebook لتسريع تحميل JavaScript

ثنائي- ast

الكثير مهندسين من شركات Cloudflare و Mozilla و Facebook و Bloomberg بدأوا العمل عليه مشروع جديد يسمى "بيناريست" لتسريع تسليم ومعالجة كود جافا سكريبت عند فتح المواقع في متصفحات الويب.

يأخذ BinaryAST مرحلة التحليل إلى جانب الخادم ويقدم شجرة بناء جملة مجردة (AST) تم إنشاؤها بالفعل. عند تلقي BinaryAST ، يمكن للمتصفح الانتقال فورًا إلى مرحلة التجميع ، دون المرور بتحليل شفرة مصدر JavaScript.

تم إعداد تطبيق مرجعي تم إعداده بموجب تراخيص معهد ماساتشوستس للتكنولوجيا للاختبار ، وتستخدم مكونات Node.js لتحليل الكود لتحسين وإنشاء AST ، وهو مكتوب في Rust.

يمكن استخدام المشفر في BinaryAST على مستوى مجموعة أدوات الموقع النهائي وتعبئة البرامج النصية للموقع الخارجي على جانب الوكيل أو شبكة توصيل المحتوى.

اليوم، بدأت بالفعل عملية توحيد BinaryAST بواسطة مجموعة عمل ECMA TC39، وبعد ذلك سيكون التنسيق قادرًا على التعايش مع الطرق الحالية لضغط المحتوى الذي تم تسليمه ، مثل gzip و brotli.

تؤثر العديد من ملفات جافا سكريبت على تحميل صفحات الويب

يستغرق وقتًا طويلاً أثناء معالجة JavaScript مرحلة تحميل الكود والتحليل.

بالنظر إلى حقيقة أن حجم جافا سكريبت تم تحميله على العديد من المواقع الشعبية تقترب من 10 ميجابايت (على سبيل المثال ، لـ LinkedIn - 7.2 ميجابايت ، Facebook - 7.1 ميجابايت ، Gmail - 3.9 ميجابايت) ، العملية أول جافا سكريبت يتسبب في تأخير كبير.

تتباطأ أيضًا مرحلة التحليل على جانب المتصفح نظرًا لعدم القدرة على إنشاء AST سريعًا أثناء تحميل الكود (يتعين على المتصفح انتظار تحميل كتل التعليمات البرمجية ، على سبيل المثال نهاية الوظائف ، للحصول على المعلومات المفقودة لتحليل العناصر الحالية).

جزئيًا ، يحاولون حل المشكلة عن طريق توزيع الكود في شكل مصغر ومضغوط ، وكذلك عن طريق التخزين المؤقت الذي تم إنشاؤه بواسطة المتصفح.

ثنائي- ast-1

بينما في المواقع الحديثة يتم تحديث الكود بشكل متكرر ، لذا فإن التخزين المؤقت فقط يحل المشكلة جزئيًا.

قد يكون الحل هو WebAssembly ، لكنه يتطلب الاستخدام الصريح للكتابة في الكود وهي ليست مناسبة لتسريع معالجة كود JavaScript الموجود.

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

BinaryAST هو الحل

يسمح BinaryAST بالاندماج في نموذج التطوير الحالي وتسليم الكود دون إنشاء رمز ثانوي جديد وبدون تغيير لغة جافا سكريبت.

حجم البيانات بتنسيق BinaryAST يمكن مقارنته برمز JavaScript المصغر ومضغوطة وسرعة المعالجة بسبب استبعاد مرحلة تحليل المصدر تزداد بشكل ملحوظ.

أيضًا ، يسمح التنسيق بالتجميع إلى رمز بايت أثناء تحميل BinaryAST ، دون انتظار اكتمال جميع البيانات.

ميزة BinaryAST هي أيضًا القدرة على استعادة JavaScript قابل للقراءة، ليس واحد لواحد يطابق الإصدار الأصلي ، ولكنه مكافئ لغويًا ويتضمن نفس المتغير وأسماء الوظائف (يحفظ BinaryAST الأسماء ، لكنه لا يحفظ معلومات الموقع في الكود والتنسيق والتعليقات).

الجانب الآخر من العملة هو ظهور ناقلات جديدة للهجمات ، ولكن وفقًا للمطورين ، فهي أصغر بكثير ويمكن التحكم فيها بشكل أكبر من استخدام البدائل ، مثل توزيع كود البايت.

أظهر اختبار رمز facebook 10-15٪ من موارد وحدة المعالجة المركزية يتم إنفاقها على تحليل JavaScript ويستغرق تحليلها وقتًا أطول من إنشاء الرمز الثانوي وإنشاء الكود الأولي لـ JIT.

دعم BinaryAST متاح الآن في الإصدارات الليلية من Firefox.

مصدر: https://blog.cloudflare.com


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.