تحسين وقت بدء تشغيل "أدوات مطوري البرامج"

مكسيم صديم
مكسيم صديم

أصبحت الآن عملية بدء تشغيل أدوات مطوّري البرامج أسرع بنسبة% 13 تقريبًا 🎉 (من 11.2 ثانية إلى 10 ثوانٍ)

النص المختصر (TL;DR): يتم تحقيق النتيجة عن طريق إزالة تسلسل متكرر.

نظرة عامة

أثناء بدء تشغيل أدوات مطوري البرامج، تحتاج إلى إجراء بعض الاتصالات لمحرك JavaScript V8.

عملية بدء أدوات مطوّري البرامج

تُعرف الآلية التي يستخدمها Chromium لإرسال أوامر أدوات مطوّري البرامج إلى V8 (وIPC بشكل عام) باسم mojo. اكتشف زملائي في الفريق بينيديكت ميرير وسيغورد شنايدر عدم الكفاءة أثناء العمل على مهمة أخرى، وتوصلوا إلى فكرة لتحسين هذه العملية من خلال إزالة خطوتَين مكررتين في طريقة إرسال هذه الرسائل واستلامها.

لنطّلِع على طريقة عمل آلية mojo.

آليات mojo

آليات "موجو"

هناك أمر mojo EvaluateScript يشغِّل أمر JS. يتسلسل أمر JavaScript بالكامل، بما في ذلك arguments، إلى سلسلة من رمز مصدر JavaScript الذي يمكن أن يكون eval(). كما قد تتخيل، يمكن أن تصبح هذه السلاسل طويلة ومكلفة للغاية. بعد تلقي V8 للأمر، يتم إلغاء تسلسل هذه السلاسل من رمز JavaScript قبل التشغيل. تؤدي عملية إنشاء تسلسل وإلغاء التسلسل لكل رسالة إلى توفير قدر كبير من النفقات.

أدرك "بينيديكت ميورر" أنّ إنشاء تسلسل وإلغاء تسلسل رمز arguments باهظ التكلفة وأنّ خطوات "تسلسل أمر JavaScript تسلسليًا إلى سلسلة JS" و"Deserialize JS series" هي خطوات متكررة ويمكن تخطّيها.

التفاصيل الفنية: RenderFrameHostImpl::ExecuteJavaScript

التحسينات التي أجريناها

الآليات المحسَّنة

قدمنا طريقة أخرى لواجهة برمجة التطبيقات mojo، تتيح لنا إدخال اسم الكائن وطريقة طلبه وقائمة الوسيطات مباشرةً، بدلاً من الاضطرار إلى إنشاء سلسلة من رمز مصدر JavaScript. يتيح لنا هذا الإجراء تخطي التسلسل وإلغاء التسلسل، وإزالة الحاجة إلى تحليل رمز JavaScript.

للحصول على تفاصيل فنية حول كيفية تنفيذ هذا التحسين، يُرجى الرجوع إلى التصحيحين التاليين:

  1. CL 2431864: [devtools] تقليل الأداء الزائد لإرسال الرسائل في الواجهة الأمامية
  2. CL 2442012: [devtools] استخدام ExecuteJavaScriptMethod في "أدوات مطوري البرامج"

التأثير

لقياس فعالية هذا التغيير، أجرينا بعض القياسات للمقارنة بين إصدارَي Chromium cb971089a058 و4f213b39d581 (قبل إجراء التغيير وبعده).

بالنسبة لكلتا النسختين، شغّلنا السيناريو التالي 5 مرات:

  1. تسجيل عملية التتبُّع باستخدام "chrome://tracing"
  2. فتح "أدوات مطوري البرامج" ضمن "أدوات مطوري البرامج"
  3. احصل على تتبع CrRendererMain المسجَّل وقارن المقاييس الخاصة بـ V8.

استنادًا إلى هذه التجارب، يفتح "أدوات مطوري البرامج" وتيرة أسرع بنسبة% 13 تقريبًا (من 11.2 ثانية إلى 10 ثوانٍ) بفضل التحسين.

أهم التفاصيل، وفترات وحدة المعالجة المركزية (CPU)

اسم الطريقة غير محسَّن (ميلي ثانية) محسَّنة (بالمللي ثانية) الاختلافات (ميلي ثانية) تحسين السرعة (%)
الإجمالي 11,213.19 9,953.99 -1,259.20 12.65%
v8.run 499.67 3.61 -496.06 12.65%
V8.Execute 1,654.87 1,349.61 -305.25 3.07%
v8.callFunction 1,171.84 1,339.77 167.94 -1.69%
v8.compile 133.93 3.56 -130.37 1.31%

وقت تحميل وحدة المعالجة المركزية في أدوات مطوّري البرامج (بالمللي ثانية)

جدول كامل لمقارنة مقاييس التتبُّع

نتيجةً لذلك، يتم فتح "أدوات مطوري البرامج" وتعمل بشكل أسرع مع استخدام أقل لوحدة المعالجة المركزية (CPU). 🎉

تنزيل قنوات المعاينة

يمكنك استخدام إصدار Canary أو إصدار مطوّري البرامج أو الإصدار التجريبي من Chrome ليكون متصفِّح التطوير التلقائي. تتيح لك قنوات المعاينة هذه الوصول إلى أحدث ميزات أدوات مطوّري البرامج، واختبار واجهات برمجة التطبيقات المتطورة للأنظمة الأساسية للويب، والعثور على المشاكل في موقعك الإلكتروني قبل أن يتمكّن المستخدمون من ذلك.

التواصل مع فريق "أدوات مطوري البرامج في Chrome"

يمكنك استخدام الخيارات التالية لمناقشة الميزات والتغييرات الجديدة في المشاركة، أو أي موضوع آخر مرتبط بـ "أدوات مطوري البرامج".

  • يمكنك إرسال اقتراحات أو ملاحظات إلينا عبر crbug.com.
  • يمكنك الإبلاغ عن مشكلة في "أدوات مطوري البرامج" باستخدام خيارات إضافية   المزيد > مساعدة > الإبلاغ عن مشاكل في "أدوات مطوري البرامج" في "أدوات مطوري البرامج".
  • نشر تغريدة على @ChromeDevTools
  • يمكنك إضافة تعليقات على الميزات الجديدة في الفيديوهات على YouTube في "أدوات مطوري البرامج" أو الفيديوهات على YouTube التي تتضمّن نصائح حول أدوات مطوّري البرامج.