هندسة UI في عصر الذكاء الاصطناعي
كان Web متعدد المنصات إجابة جيدة قبل الذكاء الاصطناعي. أصبحت كتابة الكود أقل كلفة، لكن التحقق منه لم يصبح كذلك. وهذا يفتح المجال أمام GPU UI وتوليد تطبيقات أصلية لكل منصة مباشرة. اختبرنا 10 أطر عمل.
أصلييُمنع إعادة النشر دون إذن

في 12/12/2025، أغلق مهندس Zed، mikayla-maki، طلب PR يقترح إضافة shader مخصص إلى GPUI. كان الرد مهذبًا. شكر صاحب المساهمة، ثم قال: “we’re shifting focus to core product work at Zed, and without a Zed use case, I can’t validate this code”. وأنهى الرد بوجه مبتسم.
GPUI هو إطار واجهات GPU الذي طوّرته Zed بنفسها. ويتكرر ذكره عند مناقشة بدائل Electron. وقبل ذلك بأقل من أربعة أشهر، كانت Zed قد أعلنت جمع 32,000,000 دولار في جولة بقيادة Sequoia، ليتجاوز إجمالي تمويلها 42,000,000 دولار.
بعد أكثر من تسعة أشهر، في 26/9/2026، أنشأ المطوّر egoist مستودعًا باسم MyGo. وبعد 39 يومًا، ضم المستودع 1,042 عملية commit، حملت 890 منها توقيع Claude.
Claude من تطوير Anthropic. وتطبيق Anthropic المكتبي نفسه يستخدم Electron.
تبدو هذه الوقائع الثلاث غريبة بعض الشيء حين توضع معًا. اختبرنا 10 أطر عمل على جهازين لنعرف أين وصل هذا المجال.
01خلفية التقييم
ما زالت تطبيقات سطح المكتب مثل Claude وCodex تستخدم Electron: منظومة Web ناضجة، وقاعدة شيفرة واحدة تدعم منصات متعددة، والنماذج تعرفها جيدًا. يقلل الذكاء الاصطناعي تكلفة التطوير، لكن التوافق بين المنصات والصيانة ما زالا يتطلبان جهدًا.
يوفر الرسم الذاتي عبر GPU مسارًا آخر، لكن GPUI ما زال يعطي الأولوية لـ Zed. يحتاج الرسم عبر المنصات ومنظومة المكونات إلى استثمار طويل الأجل. يوضح MyGo كيف يسرّع الذكاء الاصطناعي والمكونات الجاهزة الانطلاق، لكن النضج في الإنتاج وقابلية الصيانة طويلة الأجل لم يُثبتا بعد.
تتبنى Flutter وCompose وSlint وegui وiced مفاضلات مختلفة. اختبرنا 10 أطر بالسيناريوهات نفسها، وقسنا السلاسة وCPU والذاكرة ودقة مطابقة التصميم لمعرفة التكلفة الفعلية لكل مسار.
02أجرينا اختبارات محلية
اختبرنا 10 أطر بالسيناريوهات نفسها على Apple M4 Max وThinkPad T14 Gen6. قسنا CPU والذاكرة على المنصتين؛ ولـ Windows أيضًا قياسات خارجية للإطارات عبر PresentMon. تختلف تعريفات استدعاءات الإطارات في Mac بين الأطر، فلا نستخدمها للمقارنة. كما تختلف الأجهزة ومقاييس الذاكرة، لذا نحصر المقارنة داخل كل منصة.
مشهد الحركة كثيف: 500 بطاقة بحجم 96×64 بكسل منطقي، موزعة بتداخل على 25 عمودًا. لكل بطاقة زوايا بنصف قطر 12 وتدرج بزاوية 135° وظل بقيمة blur 16 وإزاحة لأسفل قدرها 4. تتحدث مواضع جميع البطاقات مع كل إطار، وتدور حول مراكزها بنصف قطر 12 ودورة مدتها 4 ثوانٍ. نعرض وسيط خمس جولات مدة كل منها 30 ثانية.
نقيس أساسًا تكلفة CPU لتحديث الواجهة وتجهيز الرسم وإرسال التصيير أثناء حركة عناصر كثيرة ذات تأثيرات باستمرار، ومدى انتظام إخراج الإطارات. تشمل CPU شجرة عمليات التطبيق، وليست استخدام GPU أو تفصيل زمن كل مرحلة. يجب قراءتها مع فواصل الإطارات؛ فإخراج إطارات أقل قد يخفض CPU أيضًا. العدد 500 هو عدد البطاقات في المشهد، لكن التداخل والقص عند حدود النافذة يعنيان أنها لا تُرسم كلها بالكامل في كل إطار.
Windows
| الإطار | إطار القائمة | إطار الحركة | CPU البث | CPU التحرير | CPU الحركة | ذاكرة الحركة |
|---|---|---|---|---|---|---|
| WPF (أصلي) | 8.6 | 684 | 73% | 13% | 49% | 2,425 |
| Electron | 8.8 | 108 | 31% | 92% | 138% | 947 |
| Tauri | غير صالح | 92 | 54% | 105% | 148% | 913 |
| GPUI | 8.6 | 16.7 | 24% | 4% | 22% | 142 |
| MyGo | 8.4 | 8.6 | 11% | 6% | 33% | 115 |
| egui | 8.8 | 8.5 | 12% | 20% | 49% | 388 |
| iced | 8.9 | 8.5 | 20% | 3% | 25% | 215 |
| Slint | 8.5 | 8.5 | 27% | 99% | 67% | 61 |
| Flutter | 8.4 | 80 | 22% | 105% | 91% | 4,934 |
| Compose | 8.8 | 160 | 34% | 106% | 102% | 2,422 |
واكبت جميع الأطر تمرير القائمة. ظهر الفرق في الحركة: مع 500 بطاقة بظلال وتدرجات، حافظت أطر الرسم الذاتي المكتوبة بـ Rust وGo عمومًا على 120Hz. أما Flutter وElectron وTauri وCompose فوصلت فواصل الإطارات فيها إلى 80–160ms. جاءت نتيجة WPF البالغة 684ms من 500 تأثير ظل مستقل. وعادت إلى 8.3ms عند إيقافها، لذا ليست مشكلة عامة.
تحرير النص عقبة أخرى. عند إدخال 10 محارف في الثانية في مستند من 5,000 سطر، استهلك كل من Flutter وCompose وSlint نواة كاملة. وفقد Flutter على Windows ثلاثين بالمئة من المدخلات أيضًا.
Mac
| الإطار | CPU البث | CPU التحرير | CPU الحركة | ذاكرة القائمة | ذاكرة الحركة |
|---|---|---|---|---|---|
| SwiftUI | 87.5% | 8.9% | 99.1% | 40 | 37 |
| Electron | 16.1% | 62.0% | 102.2% | 536 | 698 |
| Tauri | 42.1% | 86.9% | 78.7% | 753 | 555 |
| GPUI | 22.5% | 2.9% | 17.0% | 341 | 335 |
| MyGo | 8.2% | 2.8% | 16.3% | 368 | 371 |
| egui | 8.6% | 7.2% | 20.4% | 803 | 839 |
| iced | 18.2% | 7.5% | 15.0% | 489 | 491 |
| Slint | 18.4% | 52.1% | 26.7% | 423 | 416 |
| Flutter | 18.3% | 101.9% | 237.4% | 468 | 994 |
| Compose | 31.3% | 105.1% | 107.5% | 710 | 1,295 |
على Mac، بلغ CPU للحركة نحو 15%–20% لدى GPUI وMyGo وegui وiced، مقابل 237% لدى Flutter ونحو 100% لدى Electron وCompose. عند تحرير النص، ظل Flutter وCompose قريبين من استهلاك نواة كاملة. سجل Slint نسبة 52%، أقل من نسبته البالغة 99% على Windows.
في مشهد القائمة، تصف أرقام SwiftUI نحو 40 MiB وGPUI نحو 340 MiB وegui نحو 800 MiB بصمة عمليات التطبيق أولًا. يمكن للواجهة الأصلية استخدام خدمات تصيير النظام خارج العملية: توضح Apple أن AppKit يفضل تصيير شجرة الطبقات خارج العملية، لذا يجري جزء من الرسم والتركيب خارج التطبيق. تستخدم محركات الرسم المخصصة تركيب النظام أيضًا، لكن أرقام التطبيق وحدها لا تقارن توزيع العمل بين المسارين. تعني الذاكرة الموحدة في شرائح M اشتراك CPU وGPU في الذاكرة الفعلية، لا احتساب كل التكاليف ضمن phys_footprint للتطبيق.
في خمسة تتبعات GPU قصيرة لكل من مشهدي القائمة والحركة في SwiftUI، لم تُرصد أحداث تنفيذ GPU لمعرّف عملية التطبيق، بينما كان WindowServer نشطًا. لا يعني ذلك أن SwiftUI لا يستخدم GPU، ولا يجوز نسب نشاط سطح المكتب كله إليه. تقلب خط أساس ذاكرة WindowServer بنحو 205 MiB؛ وعدم ظهور كائنات مشتركة كبيرة في اللقطات لا يستبعد إعادة استخدام موارد النظام الموجودة. تثبت البيانات انخفاض بصمة عملية SwiftUI فقط، لا انخفاض التكلفة الكاملة للتصيير ولا تحمّل النظام كامل الفارق.
هذه الأرقام تخص هذين الجهازين وهذه الإصدارات وبرامج الاختبار التي كتبناها فقط. المنهج والبيانات الكاملة في القسم 05.
03لم تكن المسألة يومًا اختيار واحد فقط
تختلف متطلبات المحررات وأدوات التطوير وتطبيقات الأعمال في إدخال النص والحركة والذاكرة والتوزيع عبر المنصات ومنظومة المكونات. لكل منها سيناريوهاته، واختيار إطار يعني تحديد المفاضلات المقبولة.
تستخدم أطر كثيرة أيضًا الاحتفاظ والتخزين المؤقت والتحديثات الجزئية لتجنب تكرار التخطيط والرسم. يجمع GPUI بين النمطين الفوري والمحتفظ به. نموذج الواجهة والعمل الذي يمكن إعادة استخدامه وزمن رسم الإطار مسائل مختلفة.
تواكب MyGo وiced وGPUI وSlint وegui متطلبات الحركة، مع استخدام منخفض لـ CPU. يستهلك Slint أقل قدر من الذاكرة، بينما يستهلك egui قدرًا مرتفعًا نسبيًا، ويجب توفير عناصر التحرير في GPUI بنفسك. يُستخدم MyGo حاليًا بشكل أساسي في تطبيقات المؤلف، ولم يخضع بعد لاختبار واسع النطاق في بيئات الإنتاج.
كما كانت فواصل الإطارات واستهلاك الموارد لدى Flutter وElectron وCompose غير مرضية في اختبار ضغط الحركة هذا. لا يتجاوز حجم حزمة Tauri مقدار 11 MB، لكن استهلاكها للذاكرة أثناء التشغيل قريب من استهلاك Electron.
04العقبة في التحقق
نرى الآن أن التحقق أهم من الرسم.
أصبحت كتابة الكود أقل كلفة، لكن التأكد من صحته لا يزال يحتاج إلى وقت. في استطلاع مطوري Stack Overflow لعام 2025، واجه 66% حلولًا من الذكاء الاصطناعي كانت “almost right, but not quite”، وقال 45.2% إن تصحيح أخطاء كوده يستغرق وقتًا أطول. وفي استطلاع نشرته Sonar في 01/2026، لم يثق 96% تمامًا بالصحة الوظيفية للكود المولّد، وقال 48% فقط إنهم يفحصونه دائمًا قبل commit. تبيع Sonar أدوات فحص الكود، لذا ينبغي قراءة أرقامها بشيء من التحفظ، لكنها تتسق مع الاستطلاع السابق.
لم يثر إصدارا Slint وegui ضجة كبيرة. ونراهما أهم من التقدم في الرسم. يحتاج الوكيل إلى حقن المدخلات والتقاط صور الشاشة كي يعدّل، وينظر، ثم يعدّل مجددًا. كان التحقق من الواجهة يتطلب شخصًا يجلس أمام الجهاز وينقر العناصر واحدًا واحدًا. والآن بدأت الآلة تتولى هذا العمل.
توجد حاليًا ثلاث طرق. يملك Web متعدد المنصات أكبر رصيد من الأدوات والخبرات. لا يحتاج الرسم الذاتي عبر GPU إلى حمل متصفح، وأصبحت عتبة بنائه أقل من قبل. أما بناء تطبيق أصلي لكل منصة فهو النهج الأقدم. في السابق لم تستطع تحمل كلفة عدة فرق إلا الشركات الكبرى. وتتمثل الصعوبة الآن في تضاعف عدد الأخطاء ونطاق الدعم ثلاث مرات كما وصف Breunig. إذا انخفضت كلفة التحقق وارتفعت الجودة، فقد ينجح أيضًا توليد تطبيق أصلي لكل منصة مباشرة.
نجرّب نحن أيضًا GPU UI خاصًا بنا. والفارق هو نقل جزء كبير من DX في تطوير Web: مكونات شبيهة بـ JSX، وأنماط شبيهة بـ CSS، وتخطيط flexbox، وحالة تفاعلية، وDevTools تشبه أدوات المتصفح، ثم الترجمة إلى كود أصلي. ما زال المشروع في بدايته.
لا نعرف أي إجابة ستفوز، وقد تتعايش عدة إجابات طويلًا. لم تتغير الوقائع الثلاث في البداية حتى اليوم. ما زال PR مغلقًا، وMyGo ينمو، وتطبيق Claude المكتبي لا يزال يستخدم Electron. إنه وقت مثير للاهتمام.
05تقرير التجربة
أُجريت الاختبارات من 4 إلى 6 نوفمبر 2026. نُفّذت السيناريوهات نفسها في كل إطار عمل باستخدام الأساليب الموصى بها والإعدادات الافتراضية وبُنى الإصدار. بعد تصحيح التمويه في Compose، أعدنا قياس صفحة التصميم ومشهد الخمول الذي يستخدم التنفيذ نفسه.
| البند | Mac | Windows |
|---|---|---|
| الجهاز | Apple M4 Max، عدد الأنوية 16، وذاكرة 64 GB | ThinkPad T14 Gen6، مع Core Ultra 7 255H، ورسومات مدمجة Arc 140T، وذاكرة 32 GB |
| النظام | macOS 26.4 | Windows 11 Pro 10.0.26300 |
| الشاشة | Studio Display,60Hz,2x | 2880×1800,120Hz,200% |
| النافذة | 1440×900 بكسل منطقي | 1280×720 بكسل منطقي؛ صفحة التصميم 1440×900 بلا إطار |
| مقياس الذاكرة | phys_footprint | private commit (ذاكرة خاصة ملتزم بها، لا الاستهلاك الفعلي للذاكرة المادية) |
| مقياس الإطارات | استدعاءات التطبيق الراجعة؛ تختلف دلالتها بين الأطر ولا تُستخدم للمقارنة | فاصل العرض في PresentMon 2.6.0، بقياس خارجي |
| حالة الجهاز | ليس خاملًا؛ مهام تطوير أخرى أثناء الاختبار | لا إجراءات أخرى من المستخدم |
| الإطار | الإصدار | مسار رسم Mac | مسار رسم Windows |
|---|---|---|---|
| SwiftUI / WPF | macOS 26.4 SDK / .NET Framework 4.8.1 | تركيب النظام | مسار D3D9 الافتراضي في WPF |
| Electron | 45.2.2 | غير متحقق منه | Chromium,ANGLE D3D11 |
| Tauri | 2.12.5 | WKWebView | WebView2 156,ANGLE D3D11 |
| GPUI | Zed c4273271 | Metal، إعدادات افتراضية | غير متحقق منه |
| MyGo | 86ec3b30 | غير متحقق منه | غير متحقق منه |
| egui | eframe 0.37.0 | Metal | Vulkan |
| iced | 0.14.0 | Metal | Vulkan |
| Slint | 1.18.1 | FemtoVG,OpenGL | FemtoVG,OpenGL ES |
| Flutter | 3.47.9 | Impeller,Metal | Impeller,ANGLE D3D11 |
| Compose | 1.12.2 | Skiko,Metal | Skiko,D3D12 |
| السيناريو | عبء العمل |
|---|---|
| ثبات | عرض صفحة التصميم وتركها ثابتة لقياس كلفة الخمول |
| قائمة | قائمة افتراضية من 10,000 سطر، ارتفاع السطر 64، وتمرير ثابت بسرعة 2,000 px/s |
| بث | تحميل 200 رسالة سابقة، ثم إضافة 40 كلمة في الثانية إلى الأخيرة، مع البقاء في الأسفل |
| تحرير | مستند من 5,000 سطر، وإدخال 10 محارف في الثانية عند المؤشر |
| الحركة | 500 بطاقة بأبعاد 96×64، ونصف قطر زوايا 12، وتدرج وظل، تتحرك دائريًا وفق صيغة موحدة |
| صفحة التصميم | 11 مواصفة تصميم: الخطوط، الظلال، الخطوط الرفيعة، التدرجات، P3، تمويه الخلفية، الزوايا المستديرة، emoji، OpenType، وتنضيد الصينية والإنجليزية معًا |
شغّلنا كل سيناريو 5 مرات لكل إطار، مدة كل مرة 30 ثانية، بالتتابع وبترتيب مختلط. جميع القيم أدناه وسيطة. بلغ وسيط المدى بين الجولات الـ5 نحو 3%، وكانت تسعة أعشارها ضمن 24%. أعدنا قياس القائمة والحركة بعد توحيد المواصفات، لذا لم تُجمع الأعمدة في الفترة نفسها. نواة منطقية واحدة تعادل 100% من CPU. تشمل التطبيقات متعددة العمليات جميع العمليات التابعة. ولـ Tauri على Mac احتسبنا أيضًا عمليات WebKit التي أطلقها النظام له. في بيانات إطارات Windows، استخدمنا فقط الجولات المنسوبة بشكل فريد إلى swapchain واحد، دون فقد سجلات.
راجعنا الحجم المنجز فعليًا في البث والتحرير: أكمل Flutter على Windows نسبة 68% فقط من التحرير، بينما تجاوز الجميع 99%.
| الإطار | ثبات | قائمة | بث | تحرير | الحركة |
|---|---|---|---|---|---|
| WPF | 2.6 | 37.2 | 72.7 | 13.5 | 49.3 |
| Electron | 6.1 | 42.8 | 30.6 | 92.1 | 137.8 |
| Tauri | 31.6 | 58.2 | 53.7 | 104.9 | 147.8 |
| GPUI | 1.5 | 10.6 | 24.3 | 3.6 | 21.5 |
| MyGo | 0.0 | 17.9 | 10.6 | 6.3 | 32.8 |
| egui | 0.3 | 15.9 | 12.2 | 19.6 | 48.9 |
| iced | 0.3 | 21.3 | 20.2 | 3.0 | 24.5 |
| Slint | 0.3 | 62.7 | 26.9 | 99.1 | 66.8 |
| Flutter | 0.6 | 31.2 | 21.8 | 104.6 | 90.6 |
| Compose | 0.5 | 35.9 | 34.4 | 106.4 | 101.8 |
| الإطار | ثبات | قائمة | بث | تحرير | الحركة |
|---|---|---|---|---|---|
| WPF | 157 | 193 | 250 | 206 | 2,425 |
| Electron | 280 | 397 | 392 | 556 | 947 |
| Tauri | 260 | 313 | 346 | 536 | 913 |
| GPUI | 135 | 142 | 160 | 138 | 142 |
| MyGo | 132 | 135 | 133 | 132 | 115 |
| egui | 379 | 386 | 396 | 460 | 388 |
| iced | 212 | 224 | 274 | 321 | 215 |
| Slint | 79 | 87 | 72 | 202 | 61 |
| Flutter | 636 | 396 | 374 | 667 | 4,934 |
| Compose | 421 | 544 | 574 | 3,372 | 2,422 |
| الإطار | قائمة p95 | قائمة p99 | الجولات | حركة p95 | حركة p99 | الجولات |
|---|---|---|---|---|---|---|
| WPF | 8.6 | 8.7 | 5 | 684.3 | 719.3 | 5 |
| Electron | 8.8 | 8.9 | 4 | 108.3 | 115.9 | 2 |
| Tauri | — | — | 0 | 91.7 | 100.0 | 5 |
| GPUI | 8.6 | 8.8 | 5 | 16.7 | 25.1 | 5 |
| MyGo | 8.4 | 8.7 | 5 | 8.6 | 16.7 | 5 |
| egui | 8.8 | 8.9 | 5 | 8.5 | 8.7 | 5 |
| iced | 8.9 | 8.9 | 5 | 8.5 | 8.6 | 5 |
| Slint | 8.5 | 8.8 | 5 | 8.5 | 8.7 | 5 |
| Flutter | 8.4 | 8.6 | 5 | 80.5 | 88.6 | 5 |
| Compose | 8.8 | 8.9 | 5 | 160.3 | 211.8 | 5 |
| الإطار | ثبات | قائمة | بث | تحرير | الحركة |
|---|---|---|---|---|---|
| SwiftUI | 1.0 | 16.9 | 87.5 | 8.9 | 99.1 |
| Electron | 2.5 | 16.7 | 16.1 | 62.0 | 102.2 |
| Tauri | 6.3 | 32.0 | 42.1 | 86.9 | 78.7 |
| GPUI | 0.4 | 9.7 | 22.5 | 2.9 | 17.0 |
| MyGo | 0.1 | 13.2 | 8.2 | 2.8 | 16.3 |
| egui | 0.1 | 9.0 | 8.6 | 7.2 | 20.4 |
| iced | 0.1 | 24.2 | 18.2 | 7.5 | 15.0 |
| Slint | 0.1 | 13.1 | 18.4 | 52.1 | 26.7 |
| Flutter | 0.2 | 11.0 | 18.3 | 101.9 | 237.4 |
| Compose | 0.4 | 23.3 | 31.3 | 105.1 | 107.5 |
| الإطار | ثبات | قائمة | بث | تحرير | الحركة |
|---|---|---|---|---|---|
| SwiftUI | 32 | 40 | 136 | 293 | 37 |
| Electron | 205 | 536 | 567 | 707 | 698 |
| Tauri | 101 | 753 | 601 | 570 | 555 |
| GPUI | 74 | 341 | 358 | 320 | 335 |
| MyGo | 75 | 368 | 361 | 356 | 371 |
| egui | 414 | 803 | 817 | 862 | 839 |
| iced | 75 | 489 | 541 | 598 | 491 |
| Slint | 151 | 423 | 386 | 434 | 416 |
| Flutter | 156 | 468 | 455 | 663 | 994 |
| Compose | 350 | 710 | 709 | 1,426 | 1,295 |
| الإطار | بدء Mac | بدء Windows | حجم Mac | حجم Windows |
|---|---|---|---|---|
| أصلي (SwiftUI / WPF) | 228 | 449 | 3.0 | <0.1 |
| Electron | 295 | 818 | 267.0 | 376.4 |
| Tauri | 565 | 622 | 12.5 | 11.2 |
| GPUI | 255 | 277 | 11.9 | 13.4 |
| MyGo | 742 | 126 | 13.1 | 11.5 |
| egui | 309 | 277 | 17.4 | 17.4 |
| iced | 257 | 590 | 14.4 | 14.2 |
| Slint | 261 | 272 | 18.5 | 17.0 |
| Flutter | 244 | 1,043 | 43.9 | 30.0 |
| Compose | 550 | 1,074 | 123.1 | 113.8 |
مطابقة التصميم
يتطلب اختبار التمويه تنعيم الانتقالات بين الأشرطة الملونة في لوحة محددة داخل النافذة. عند تطبيق Modifier.blur بقيمة 24 dp على طبقة الأشرطة في Compose 1.12.2، ظهرت انتقالات ناعمة في لقطات النوافذ الأصلية على Mac وWindows. ويُموّه SwiftUI بدوره طبقة الأشرطة المعروفة قبل تغطيتها بطبقة بيضاء شبه شفافة. اقتصر التحقق في الطريقتين على هذه الطبقة. واجهة Compose Desktop
أضافت تطبيقات الاختبار في GPUI وiced وegui وSlint طبقة شبه شفافة فوق الأشرطة. وظلت حدود الألوان حادة عند إعادة الاختبار. يؤثر Blurred في GPUI وwindow::Settings::blur في iced على المحتوى خلف النافذة. لم نجد في واجهات الرسم المضمّنة في الإصدارات المختبرة تمويهًا موضعيًا للخلفية. يتيح iced رسم تأثيرات موضعية بعارض مخصّص، ويمكن لـ egui استدعاء محرك العرض عبر PaintCallback. GPUI · إعدادات نافذة iced · رد نداء الرسم في egui
اختبرنا Slint بالإصدار 1.18.1 مع FemtoVG. لم يوفّر ذلك الإصدار خاصية backdrop-blur للعناصر. أضافها المشروع لاحقًا لعارض Skia. وتعرض اللقطات مسار FemtoVG في الإصدار 1.18.1. سجل Slint
تضم صفحة التصميم 11 فحصًا. لم يُعِد GPUI وegui وiced وSlint وCompose إنتاج عينة P3 في خرج Mac المختبر. لا تحتوي لقطات Windows على ملف ألوان، لذا لا نحكم على P3؛ وتظهر رموز الأعلام حروفًا.
| الإطار | التخطيط | النص | إمكانية الوصول |
|---|---|---|---|
| GPUI | Taffy | CoreText على macOS | AccessKit |
| egui | تخطيط بالنمط الفوري | epaint + harfrust | AccessKit |
| iced | تخطيط flex خاص | cosmic-text | لم نجد جسرًا للنظام |
| Slint | Lowering وقت الترجمة + تخطيط وقت التشغيل | Parley | AccessKit |
| Flutter | قيود RenderBox | SkParagraph | جسر شجرة Semantics |
| Compose | MeasurePolicy | SkParagraph من Skiko | Semantics؛ يتطلب Windows وجود Java Access Bridge |
| Electron | Blink | مسار نصوص Chromium | شجرة إمكانية الوصول في Chromium |
| Tauri | WebView النظام | WebView النظام | متاح عبر WebView |
| SwiftUI | Stack / Layout | TextKit,Core Text | مدمج في النظام |
تتقارب أساليب التخطيط، ويبقى النص أكبر موضع اختلاف. عندما طلب iced استخدام PingFang 700 على macOS، استُخدم Menlo Bold بديلًا للحروف اللاتينية.
القيود:
- جهاز واحد فقط لكل منصة. نتائج الحركة مأخوذة من GPU مدمج من Intel، وقد لا تنطبق على وحدات GPU المنفصلة.
- لم يكن Mac خاملًا أثناء الاختبار. بيانات الإطارات من استدعاءات التطبيق الراجعة فقط، ولا نستخدمها للمقارنة بين الأطر.
- تختلف دلالة blur في الظلال. تستخدم egui وiced وGPUI تنفيذات تقريبية. وعناصر التحرير ليست متكافئة أيضًا؛ يستخدم GPUI محررًا من الأمثلة بعد تعديله.
- تشمل جداول CPU والذاكرة التطبيق والعمليات المساعدة المدرجة فقط. لم توزع تكاليف WindowServer وبرنامج التشغيل حسب النافذة، ولم تُقَس فوائد إعادة استخدام موارد النظام المشتركة؛ لذلك لا ترتب هذه الجداول التكلفة الكلية للتصيير على مستوى النظام.
- لم نحصل على نتائج صالحة لنوافذ مرشحات طريقة الإدخال أو شجرة إمكانية الوصول على Mac أو استهلاك الطاقة.

