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

Maksim Sadym
Maksim Sadym

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

النصّ المختصر: يتمّ تحقيق النتيجة من خلال إزالة تسلسل مكرّر.

نظرة عامة

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

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

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

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

آليات mojo

آليات Mojo

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

لاحظ "بينيديكت ميوير" أنّ تسلسل arguments وتحويله إلى سلسلة JS هو عملية مكلفة للغاية، وأنّ خطوات "تسلسل أمر JavaScript إلى سلسلة JS" و"تحويل سلسلة JS إلى أمر JavaScript" بأكملها زائدة ويمكن تخطّيها.

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

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

آليات محسّنة

لقد طرحنا طريقة أخرى في Mojo API تتيح لنا تمرير اسم الكائن وطريقة الاتصال بقائمة الوسيطات مباشرةً، بدلاً من إنشاء سلسلة من رمز JavaScript المصدر. يتيح لنا ذلك تخطّي التسلسل وإزالة التسلسل، ويزيل الحاجة إلى تحليل رمز JavaScript.

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

  1. CL 2431864: [devtools] Reduce performance overhead of message dispatch in the front-end
  2. CL 2442012: [devtools] Use ExecuteJavaScriptMethod in DevTools

التأثير

لقياس مدى فعالية التغيير، أجرينا بعض القياسات التي تقارن بين نُسخ Chromium cb971089a058 و4f213b39d581 (قبل التغيير وبعده).

في كلتا المراجعتَين، أجرينا السيناريو التالي 5 مرّات:

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

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

أهم التفاصيل، مدّة استخدام وحدة المعالجة المركزية

اسم الطريقة غير محسَّن (ملي ثانية) الوقت المحسَّن (بالملي ثانية) الاختلافات (بالملي ثانية) تحسين السرعة (%)
الإجمالي 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%

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

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

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

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

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

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

استخدِم الخيارات التالية لمناقشة الميزات الجديدة أو التحديثات أو أي شيء آخر مرتبط بـ "أدوات مطوّري البرامج".