أصبح تشغيل "أدوات مطوّري البرامج" أسرع الآن بنسبة% 13 تقريبًا 🎉 (من 11.2 ثانية إلى 10 ثوانٍ).
النصّ المختصر: يتمّ تحقيق النتيجة من خلال إزالة تسلسل مكرّر.
نظرة عامة
أثناء بدء تشغيل "أدوات المطوّر"، يجب إجراء بعض طلبات البيانات إلى محرك JavaScript V8.
تُعرف الآلية التي يستخدمها Chromium لإرسال أوامر "أدوات مطوّري البرامج في Chrome" إلى V8 (وآلية واجهة برمجة التطبيقات بين العمليات بشكل عام) باسم mojo
. لاحظ زميليان بنديكت ميوير وسيغورد شنايدر عدم كفاءة في عملية إرسال الرسائل واستلامها أثناء العمل على مهمة أخرى، وطرحا فكرة لتحسين العملية من خلال إزالة خطوتَين متكررتين في كيفية إرسال هذه الرسائل واستلامها.
لنطّلع على آلية عمل mojo
.
آليات mojo
هناك أمر mojo EvaluateScript
الذي يشغِّل أمر JS. ويُسلسل الأمر JS بالكامل بما في ذلك arguments
إلى سلسلة من رمز مصدر JavaScript يمكن eval()
. وكما يمكنك أن تتخيل، يمكن أن تصبح هذه السلاسل طويلة جدًا ومكلفة. بعد أن يتلقّى V8 الأمر، يتم تحويل سلاسل رمز JavaScript هذه إلى سلسلة أحرف قبل تشغيلها. تؤدي عملية تسلسل كل رسالة وإلغاء تسلسلها إلى زيادة كبيرة في وقت الاستجابة.
لاحظ "بينيديكت ميوير" أنّ تسلسل arguments
وتحويله إلى سلسلة JS هو عملية مكلفة للغاية، وأنّ خطوات "تسلسل أمر JavaScript إلى سلسلة JS" و"تحويل سلسلة JS إلى أمر JavaScript" بأكملها زائدة ويمكن تخطّيها.
التفاصيل الفنية: RenderFrameHostImpl::ExecuteJavaScript
التحسينات التي أجريناها
لقد طرحنا طريقة أخرى في Mojo API تتيح لنا تمرير اسم الكائن وطريقة الاتصال بقائمة الوسيطات مباشرةً، بدلاً من إنشاء سلسلة من رمز JavaScript المصدر. يتيح لنا ذلك تخطّي التسلسل وإزالة التسلسل، ويزيل الحاجة إلى تحليل رمز JavaScript.
للاطّلاع على التفاصيل الفنية حول كيفية تنفيذنا لهذا التحسين، يُرجى الرجوع إلى التصحيحَين التاليَين:
- CL 2431864: [devtools] Reduce performance overhead of message dispatch in the front-end
- CL 2442012: [devtools] Use
ExecuteJavaScriptMethod
in DevTools
التأثير
لقياس مدى فعالية التغيير، أجرينا بعض القياسات التي تقارن بين نُسخ Chromium cb971089a058 و4f213b39d581 (قبل التغيير وبعده).
في كلتا المراجعتَين، أجرينا السيناريو التالي 5 مرّات:
- تسجيل عمليات التتبّع باستخدام
chrome://tracing
- فتح أدوات مطوري البرامج في أدوات مطوري البرامج
- احصل على عملية تتبُّع
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"
استخدِم الخيارات التالية لمناقشة الميزات الجديدة أو التحديثات أو أي شيء آخر مرتبط بـ "أدوات مطوّري البرامج".
- يمكنك إرسال الملاحظات وطلبات الميزات إلينا على crbug.com.
- يمكنك الإبلاغ عن مشكلة في "أدوات مطوّري البرامج" باستخدام رمز خيارات إضافية > مساعدة > الإبلاغ عن مشكلة في "أدوات مطوّري البرامج" في "أدوات مطوّري البرامج".
- يمكنك نشر تغريدة على Twitter على @ChromeDevTools.
- يمكنك إضافة تعليقات على فيديوهات YouTube حول الميزات الجديدة في "أدوات مطوّري البرامج" أو فيديوهات YouTube حول نصائح حول "أدوات مطوّري البرامج".