انتقل إلى المقالة
← العودة إلى الهندسة

الإلكترون ليس عنق الزجاجة لمسجل الشاشة الخاص بك

الرسم التوضيحي للغلاف لـ Electron ليس عنق الزجاجة لمسجل الشاشة الخاص بك

TL;DR - للإلكترون تكلفة ذاكرة حقيقية. ليس من الضروري فرض عقوبة تسجيل أو تصدير ذات معنى.

على M4 Mac mini، أنتج مسجل ScreenCaptureKit الأصلي ونفس المسجل الأصلي المستضاف من Electron فيديو 4K بمعدل 57.70 و57.53 إطارًا في الثانية. استغرق تظليل التحرير 4K 1.62 مللي ثانية لكل إطار عند p95 في المعدن المباشر و1.90 مللي ثانية عبر مسار WebGL-to-Metal الخاص بـ Electron. تم تشغيل تصدير 1080p H.264 الخاضع للتحكم بمعدل 7.54x في الوقت الفعلي من خلال VideoToolbox الأصلي و7.46x من خلال مسار WebCodecs الخاص بـ Electron.

ولم تكن الفجوة صفراً. لم يكن الأمر حيث تضعه الحجة التقليدية.

كانت الخسارة الواضحة للإلكترون هي الذاكرة: 45 MB لمضيف التسجيل الأصلي المباشر مقابل 94 MB لمضيف Electron/Node المُوقع، قبل إضافة عارض Chromium. استقرت جلسة Tight Studio المعبأة حول 744-749 MB في هذا الاختبار. هذه مقايضة تستحق أن نذكرها بصراحة. وهذا ليس دليلاً على أن الإطارات الملتقطة يجب أن تنتقل عبر صفحة ويب أو أن التصدير يجب أن يعود إلى تشفير البرنامج.

نحن نبني Tight Studio بالإلكترون، لذا لدينا اهتمام بهذا السؤال. ولهذا السبب جعلنا المعيار خاضعًا للرقابة وقابلاً للتكرار، ولماذا يتضمن هذا المنشور النتائج التي تجعل الإلكترون يبدو أسوأ بالإضافة إلى النتائج التي تجعله يبدو جيدًا.

رسم تخطيطي يوضح عناصر تحكم المنتج التي تتعامل مع الإلكترون أثناء الالتقاط الأصلي، ومعالجة الفيديو النهائية GPU المدعومة بالمعدن، وبرامج ترميز الأجهزة التي تتعامل مع مسارات الوسائط

"الأصلي مقابل الإلكترون" هو المستوى الخاطئ من التجريد

تطبيق سطح المكتب ليس محرك تنفيذ واحد.

يوفر Electron عارض Chromium، وعملية Node.js الرئيسية، وقذيفة تطبيق متعددة العمليات. كما أنه يدعم الوحدات الأصلية. توضح وثائق Electron الخاصة أنه يمكن للتطبيق استخدام التعليمات البرمجية الأصلية لواجهات برمجة تطبيقات النظام الأساسي والعمل المهم للأداء.

وهذا يعني أنه يمكن إنشاء مسجل الشاشة Electron بطريقتين مختلفتين للغاية على الأقل:

  1. يمكنك التقاط الإطارات وتركيبها ونسخها وترميزها من خلال JavaScript وأسطح المتصفح.
  2. استخدم Electron لواجهة مستخدم المنتج والتنسيق بينما يمتلك ScreenCaptureKit أو AVFoundation أو Metal أو VideoToolbox أو أي محرك وسائط أصلي آخر المسار السريع.

تشترك هذه التطبيقات في تسمية الإطار. إنهم لا يشتركون في بنية الأداء.

تعمل شركة Electron بالفعل على تشغيل تطبيقات سطح المكتب الصعبة

هذه الهندسة المعمارية ليست غير عادية. توزيعات macOS الحالية من Codex وClaude تستخدم الإلكترون. على الجهاز المستخدم لهذه المقالة، يعلن Codex 26.825.41651 ElectronAsarIntegrity لها app.asar الحزمة، بينما يقوم Claude 1.26832.0 بإصدار كليهما Electron Framework.framework و app.asar.

تشير وثائق Electron أيضًا إلى Visual Studio Code، Figma، Docker Desktop، Loom، Canva، Notion، 1Password، Slack، Discord، وSignal من بين المنتجات المبنية باستخدام إطار العمل. وهي تغطي تحرير التعليمات البرمجية وتصحيح الأخطاء، والرسومات التعاونية، وإدارة الحاويات، وتسجيل الشاشة، وإدارة بيانات الاعتماد، والمراسلة، والصوت والفيديو، وسير عمل الذكاء الاصطناعي.

هذه القائمة ليست معيارًا للأداء، ولا تثبت أن كل تطبيق Electron يتسم بالكفاءة. إنه يوضح النقطة المعمارية: اختيار Electron لقشرة سطح المكتب لا يتطلب من الصدفة إجراء كل عملية باهظة الثمن. يمكن للوحدات الأصلية وعمليات GPU والخدمات المحلية والأنظمة البعيدة أن تمتلك العمل المتخصص.

يمكنك إعادة إنتاج فحص الحزمة macOS بدون أدوات خاصة. في Finder، اختر إظهار محتويات الحزمة، ثم فحص Contents/Info.plist, Contents/Resources/app.asar، و Contents/Frameworks/.

Tight Studio يستخدم النموذج الثاني. في macOS، يتم التقاط إطارات الشاشة بواسطة وحدة Swift باستخدام ScreenCaptureKit وكتابتها باستخدام AVAssetWriter. لا ينحرف التسجيل عبر DOM أو React أو مساحة عمل تحرير Chromium. أثناء التحرير والتصدير، تقوم واجهات برمجة التطبيقات الخاصة بالتركيب GPU وواجهات برمجة تطبيقات ترميز الأجهزة بالعمل المكلف؛ جافا سكريبت ينسق خط الأنابيب.

تصف شركة Apple ScreenCaptureKit بأنه API عالي الأداء لالتقاط الإطارات والصوت. لا يمنع الإلكترون التطبيق من الاتصال به. يمكن للوحدة الأصلية أن تستدعي نفس إطار العمل وتستقبله CMSampleBuffer الكائنات، وتسليمها إلى نفس برنامج تشفير النظام.

ما قمنا بقياسه

لقد تجنبنا مقارنة منتجين نهائيين. قد يعرض أحد التطبيقات التسميات التوضيحية وحركة المؤشر ومقطع الكاميرا وخمسة تراكبات بينما يقوم تطبيق آخر بإعادة مزج التسجيل الأصلي. لن تخبرنا النتيجة الأسرع تقريبًا بأي شيء عن Swift أو Electron.

بدلاً من ذلك، أبقينا عبء العمل ثابتًا:

  • آلة: Apple M4 Mac mini، 10 نواة CPU، 10 نواة GPU، 16 GB ذاكرة، macOS 26.5.2.
  • التسجيل: نفس محرك الالتقاط الأصلي المعبأ، يتم تشغيله مرة واحدة من Swift CLI المباشر ومرة واحدة من Electron/Node الموقعة Tight Studio القابلة للتنفيذ. سجل كلاهما نفس العرض المتحرك 3840 × 2160 بمعدل 60 إطارًا في الثانية.
  • التحرير: نفس الخلفية الإجرائية والبطاقة المستديرة والشبكة والظل وتظليل المؤشر المتحرك بدقة 3840 × 2160. المعدن المستخدم الأصلي؛ استخدم الإلكترون WebGL 2 من خلال جهاز العرض المعدني الخاص بـ ANGLE. كان لكل إطار حدود مزامنة، لذا لا يمكن لمساحة عمل التحرير المخفية أن تجعل العمل يختفي.
  • التصدير: 300 إطار بدقة 1920×1080، و30 إطارًا في الثانية، H.264، وهدف بسرعة 12 ميجابت في الثانية. الأصلي المستخدمة المعادن بالإضافة إلى VideoToolbox. يستخدم Electron WebGL بالإضافة إلى WebCodecs مع طلب تسريع الأجهزة.
  • أشواط: ثلاثة لكل مسار. يعرض الجدول المتوسطات.

لم يتم تضمين أي نتيجة البطارية. كان هذا جهاز Mac صغيرًا، ويحتاج الادعاء الموثوق بالبطارية إلى اختبار MacBook لفترة أطول ويتم التحكم فيه.

مخططات مرجعية صفرية تقارن التسجيل الأصلي المباشر والتسجيل الإلكتروني المختلط وتحرير 4K وإنتاجية التصدير H.264

النتائج

المرحلةمواطن مباشرالإلكترون / الهجينفرق الالكترون
4K معدل إخراج التسجيل57.70 إطارًا في الثانية57.53 إطارًا في الثانية-0.29%
مضيف التسجيل CPU7.06%6.98%-0.09 نقطة
التسجيل OS-خدمة CPU31.34%32.76%+1.42 نقطة
تسجيل ذروة ذاكرة المضيف45.36 MB94.39 MB+49.03 MB
4K تحرير إنتاجية التظليل684.23 إطارًا في الثانية593.77 إطارًا في الثانية-13.22%
4K تحرير وقت عرض التظليل p951.62 مللي ثانية1.90 مللي ثانية+0.28 مللي ثانية
1080p إنتاجية التصدير226.10 إطارًا في الثانية223.78 إطارًا في الثانية-1.02%
1080p سرعة التصدير7.54x في الوقت الحقيقي7.46x في الوقت الحقيقي-1.02%

هذه اختبارات قصيرة ومضبوطة على جهاز واحد. إنهم يؤسسون ما هو ممكن مع هذه البنى؛ فهي ليست وعدًا بأن كل تطبيق Electron سيكون بهذه الكفاءة.

التسجيل: لا يحتاج الإلكترون إلى لمس الإطار

تكون نتيجة التسجيل بنفس القوة تقريبًا لأن كلا المسارين متماثلان حيثما يكون ذلك مهمًا.

يقوم ScreenCaptureKit بإنتاج الإطارات. يقوم AVAssetWriter ومكدس برنامج ترميز النظام بتشفيرها. يطلب الجانب الإلكتروني من المُسجل الأصلي البدء والإيقاف والإيقاف المؤقت والاستئناف. لا يستقبل 4K وحدات البكسل المؤقتة عبر قناة IPC ولا يقوم بتشفيرها في JavaScript.

عبر المسارات الثلاثة، قدم برنامج Native متوسطًا يبلغ 57.70 إطارًا في الثانية، بينما قدم مضيف Electron 57.53 إطارًا في الثانية، أي بفارق 0.29%. المسجل المتوسط ​​CPU كان 7.06% للمضيف الأصلي و6.98% للمضيف الإلكتروني. بلغ متوسط ​​خدمات الالتقاط macOS 31.34% و32.76% على التوالي.

نتيجة معدل الإطار هي النتيجة المهمة. إن الانعكاس الصغير CPU هو ضوضاء عادية أثناء التشغيل، وليس دليلاً على أن الإلكترون يسرع بطريقة ما ScreenCaptureKit.

هناك تجعد اختبار يستحق الكشف عنه. macOS يمنح إذن تسجيل الشاشة لهوية التطبيق الموقع. لم يكن لدى ثنائي Electron الثنائي الذي قمنا بتطويره هذا الإذن، لذلك استخدم تشغيل تسجيل Electron الملف القابل للتنفيذ الموقع Tight Studio في الوضع المتوافق مع Node الخاص بـ Electron. يؤدي ذلك إلى عزل الجسر الأصلي ولكنه يتجاهل عارض Chromium. قمنا بقياس الغلاف المعبأ بشكل منفصل بدلاً من تقديم مضيف 94 MB بهدوء كتطبيق Electron كامل.

التحرير: ترجمة المعدن لا يزال معدنًا

جافا سكريبت لا تكشف عن معدن Apple API مباشرة. تمتد هذه الحقيقة أحيانًا إلى ادعاء أوسع بكثير: أن الإلكترون لا يمكنه استخدام معالجة الفيديو النهائية GPU المدعومة بالمعدن.

في macOS، يوفر ANGLE واجهة خلفية معدنية لبرنامج OpenGL ES، وهو ما يمكن أن يستخدمه Chromium ضمن WebGL. حدد معيارنا الإلكتروني عارضه بأنه ANGLE Metal Renderer: Apple M4.

كان Direct Metal أسرع. عرض متوسط ​​التشغيل الأصلي 684 إطارًا في الثانية؛ قدم الإلكترون 594، فجوة إنتاجية قدرها 13٪. زاد وقت الإطار P95 من 1.62 إلى 1.90 مللي ثانية.

وهذا هو النفقات العامة القابلة للقياس. إنها أيضًا 0.28 مللي ثانية على ميزانية إطار تبلغ 16.67 مللي ثانية بمعدل 60 إطارًا في الثانية.

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

عندما لا يكون مسار WebGL أو WebGPU كافيًا، يظل Electron يسمح بوحدة Metal أصلية. يمكن للهندسة المعمارية اختيار فتحة الهروب الخاصة بها لكل نظام فرعي.

التصدير: لا يهتم برنامج تشفير الأجهزة بالزر الذي بدأ تشغيله

VideoToolbox هي واجهة Apple منخفضة المستوى لأجهزة تشفير الأجهزة وأجهزة فك التشفير. يحتوي Chromium على واجهة خلفية لبرنامج تشفير VideoToolbox macOS، ويكشف WebCodecs عن تفضيل تسريع الأجهزة للتطبيقات.

في تشغيلنا الأصلي، أكد VideoToolbox ترميز الأجهزة. يتطلب تشغيل Electron الأجهزة من خلال WebCodecs. لا يكشف WebCodecs عن اسم برنامج التشفير المحدد، لذلك لا يمكننا المطالبة بإثبات مستوى API لاختيار الإلكترون. يتوافق أدائه وإخراجه مع مسار الأجهزة: تم ترميز 300 إطارًا أصليًا في متوسط ​​1.327 ثانية؛ استغرق الإلكترون 1.341 ثانية. واختلفت النواتج في الحجم بأقل من 1%.

ويؤدي ذلك إلى 7.54x مقابل 7.46x في الوقت الفعلي، أي بفارق 1%.

هذا لا يعني أن كل مصدر للإلكترون سريع. يتباطأ التصدير عندما يكون التطبيق:

  • يقرأ وحدات البكسل مرة أخرى من GPU لكل إطار؛
  • نسخ الإطارات الكاملة من خلال JavaScript أو IPC؛
  • يشفر في البرمجيات.
  • إجراء تسلسل لمراحل فك التشفير والعرض والصوت والتشفير دون داع؛
  • يحتفظ بالمخرجات بأكملها في الذاكرة بدلاً من دفقها؛
  • يستخدم مؤشر ترابط واجهة المستخدم كعامل التجسيد.

هذه هي اختيارات خطوط الأنابيب، وليست المتطلبات التي يفرضها الإلكترون.

تصدير Tight Studio حقيقي

تُظهر العلامات الدقيقة مكان دخول النفقات العامة. يخبرنا اختبار المنتج ما إذا كان المسار الكامل مفيدًا أم لا.

قمنا أيضًا بتشغيل أداة انحدار التصدير الحالية المكونة من خمسة مقاطع الخاصة بـ Tight Studio ثلاث مرات. يتدرب الخط الزمني الذي تبلغ مدته 112 ثانية على فك تشفير كل مقطع، ومعالجة الفيديو النهائي GPU، والصوت، والتشفير، والتسلسل، والمزج بدقة 1440×1080. كانت أوقات التصدير 81.54 و 80.94 و 81.28 ثانية. وكان المتوسط ​​81.28 ثانية، أو 1.38x في الوقت الحقيقي.

كان طول الملف الذي تم إنشاؤه 112.36 ثانية، حوالي 30 إطارًا في الثانية، مع فيديو H.264 وصوت AAC. هذه التركيبة ليست نتيجة عالمية لسرعة التصدير — فالوسائط المصدر والتأثيرات مهمة — ولكنها عبارة عن تطبيق إلكتروني شامل يتم تصديره بشكل أسرع من التشغيل في اختبار مستودع قابل للتكرار.

مخطط يوضح تصدير مشروع Tight Studio مدته 112 ثانية في متوسط 81 ثانية، أو 1.38 مرة في الوقت الفعلي

الجزء الذي يفقده الإلكترون حقًا: الذاكرة

يقوم Electron بتضمين وقت تشغيل متصفح متعدد العمليات. وهذا يكلف الذاكرة.

بلغ مضيف التسجيل الأصلي المباشر ذروته عند 45 MB RSS. بلغ مضيف الإلكترون/العقدة الموقع ذروته عند 94 MB. كان الحد الأدنى لشجرة عملية التحرير الإلكتروني لدينا حوالي 360 MB، وكانت شجرة عملية التصدير حوالي 394 MB. تمت تسوية جلسة Tight Studio المعبأة بملف تعريف جديد في حدود 744-749 MB في حالة التطبيق المحددة هذه.

مخطط ذاكرة قائم على الصفر يقارن مضيفي التسجيل الأصليين والمضيفين الإلكترونيين، مع سياق شجرة عملية إلكترونية منفصلة

هذا الرقم الأخير ليس قانون الإلكترون، وليس مقارنة التطبيق الأصلي. إنه تذكير بعدم استخدام الحد الأدنى من غلاف الاختبار كتمويه تسويقي.

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

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

طريقة أفضل لتقييم مسجل الشاشة

اسأل عما يفعله كل نظام فرعي فعليًا:

  • أي API يلتقط الشاشة؟
  • أين يتم تركيب الإطارات؟
  • هل تم تسريع أجهزة الواجهة الخلفية GPU؟
  • ما هو تطبيق التشفير الذي تم اختياره؟
  • كم عدد نسخ الإطار الكامل التي تحدث؟
  • هل تعبر بيانات البيكسل حدود IPC أو حدود JavaScript؟
  • هل يستطيع المحرر الاحتفاظ بمعدل 60 إطارًا في الثانية بالدقة المستهدفة؟
  • ما هو وقت التصدير في الثانية من الإخراج؟
  • ما هي النتائج CPU والذاكرة والإطار المسقط والطاقة والنتائج الحرارية على نفس حمل العمل؟

تعد "الأصلي" و"الإلكترون" من تفاصيل التنفيذ المفيدة. إنها نتائج مرجعية ضعيفة.

الاستنتاج

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

لكن تطبيق Electron ليس مطلوبًا لإنشاء محرك الوسائط الخاص به من DOM العقد وحلقات JavaScript. يمكنه الالتقاط من خلال ScreenCaptureKit، المركب على واجهات برمجة التطبيقات GPU المدعومة بالمعدن، والتشفير باستخدام محرك وسائط الأجهزة، ونقل العمل المهم الأداء إلى الوحدات النمطية أو العمال الأصليين.

وجدت قياساتنا فجوة في معدل إطارات التسجيل بنسبة 0.29%، وفجوة في إنتاجية التظليل الاصطناعي 4K بنسبة 13%، وفجوة تصدير خاضعة للتحكم بنسبة 1%. لقد وجدنا أيضًا فجوة كبيرة في الذاكرة. هذا هو الشكل الصادق للمقايضة.

يحدد الإطار الإعدادات الافتراضية. يحدد خط الأنابيب الأداء.

المصادر والتكاثر

  • أبل: ScreenCaptureKit
  • أبل: VideoToolbox
  • الإلكترون: الكود الأصلي والإلكترون
  • الإلكترون: نموذج العملية
  • الإلكترون: لماذا أمثلة على تطبيقات الإلكترون والإنتاج
  • ANGLE: دعم الواجهة الخلفية المعدنية
  • الكروم: macOS برنامج تشفير videotoolbox
  • W3C: تسريع أجهزة WebCodecs

يتم الآن إعداد مجموعة الأدوات المعيارية وجدول التشغيل الأولي وتحذير الأذونات وحدود التفسير لإصدار عام مستقل. سنضيف رابط المستودع هنا عندما يمكن استنساخ الحزمة وتشغيلها بشكل مستقل. من شأن أجهزة Apple Silicon الإضافية واختبار الطاقة MacBook الخاضع للرقابة أن تعمل على توسيع هذه النتائج، ولكن لم يتم تضمينها في المطالبات أعلاه.

شارك على x