Transcript
00:00:00ويلمز (Wails) هي تقنية متعددة المنصات تتيح لك بناء تطبيقات سطح مكتب قوية بلغة Go.
00:00:04تم طلب هذا الموضوع كثيراً على القناة بعد تقديم عدة مقاطع مقارنة
00:00:08لتقنيات سطح المكتب. لذا سأصحبكم اليوم في جولة لاستخدام Wails لبناء تطبيقات احترافية
00:00:13ومقارنتها بأطر عمل مثل Electron وTauri. سنقوم بتطوير
00:00:17مسجل شاشة لسطح المكتب كما فعلنا في فيديوهات سابقة، ونقارن أموراً مثل حجم الملف،
00:00:22الأداء، وتجربة المطور. وفي الواقع، تقنية Wails جديدة تماماً بالنسبة لي، لذا
00:00:27سنتعلمها سوياً في هذا الفيديو. تعمل Wails بأسلوب مشابه جداً لـ Tauri، لكن
00:00:36الخلفية البرمجية تعتمد على Go بدلاً من Rust. تبني الواجهة الأمامية في عرض ويب (Webview) بتقنيات الويب
00:00:41ثم تستدعي واجهات برمجة التطبيقات النظامية التي تديرها Golang. هذا يعني أنه يمكنك تجميع تطبيق
00:00:47متوافق مع كل من ماك ووندوز. ولكن على عكس Electron، لا تدمج Wails متصفحاً داخلها.
00:00:52بل تعيد استخدام محرك العرض الأصلي لكل نظام تشغيل تماماً كما تفعل Tauri. لذلك فإن حجم الحزمة
00:00:58من المفترض فنياً أن يكون أصغر بكثير، وسنرى ذلك لاحقاً عندما نكتشف المقارنة.
00:01:03وإذا يعجبكم هذا المحتوى يا أصدقاء، اشتركوا للمزيد. هذه هي أداة تسجيل الشاشة
00:01:07التي قمت بتطويرها باستخدام Wails، وقد قمت أيضاً بنفس الشيء باستخدام Electron وTauri.
00:01:12سنحدد الشاشة التي نريد تسجيلها، ثم نضغط تسجيل. يمكنك تحريك الماوس، ولن يظهر تطبيق
00:01:16سطح المكتب نفسه في التسجيل. سأضغط إيقاف، وعندها يمكنك رؤية الشاشة التي سجلتها للتو.
00:01:21يمكنني قص هذا المقطع إذا أردت، ثم الضغط على تصدير إلى MP4 لحفظ الفيديو
00:01:27مباشرة على جهازي. إذا نظرنا إلى البنية البرمجية لهذا التطبيق، ستلاحظ أنها شبيبة جداً
00:01:32بما تتوقعه في Electron. لدينا جميع ملفات الواجهة الأمامية في مجلد frontend
00:01:36ثم لدينا ملف المدخل الرئيسي، وفي هذه الحالة هو ملف Go باسم main.go، وداخله
00:01:41توجد الدالة الرئيسية main. مجدداً، تتوقع رؤية شيء مماثل في Electron، ويمكننا
00:01:47تحديد العنوان، العرض، والارتفاع، وضبط لون الخلفية، بالإضافة إلى خصائص
00:01:52خاصة بنظام ماك تحديداً. لذا إن أردت اختلافات بين ماك ووندوز، فهذا ممكن تماماً.
00:01:57الان إذا نظرنا داخل الواجهة الأمامية هنا في مجلد source، ستشاهد كل كود
00:02:02React. إذا فتحنا app.tsx، ستجد كود React قياسي تماماً، باستثناء أننا نستدعي
00:02:09واجهات برمجة مُعرفة في جانب Go. إذا نظرنا إلى هذا الاستيراد API واستخداماته عبر
00:02:16الملف، ستلاحظ أننا نستدعي API.onrecording finished وonrecording failed وstart recording، وتلك الـ API
00:02:22تم إنشاؤها تلقائياً بواسطة Wails. إذا نظرنا داخل الـ API نفسها، ستجد أن كل الدوال
00:02:27الأساسية تأتي من هذا الملف wails.js/go/main/app. الآن، إذا فتحنا هذا
00:02:33الملف، ستلاحظ أنه تم إنشاؤه تلقائياً ويحتوي على تعليقات باللغة الويلزية والإنجليزية،
00:02:39والسبب هو أن مطور Wails من ويلز! لدينا كل هذه الدوال
00:02:43هنا مثل export video وlist sources وrequest screen access، وكل ما تحتاجه لأداة
00:02:49تسجيل الشاشة. فإذا انتقلنا إلى جانب Go هنا في app.go وقيل بوضع تعليق لإخفاء
00:02:54list sources ثم حفظنا الملف، ستلاحظ ظهور خطأ فجأة داخل API.ts لأن
00:02:59list sources لم تعد موجودة، وذلك لأننا نشغل أمر wails dev. فأي تغيير يحدث
00:03:05داخل ملف Go، يُعيد إنشاء تعريفات TypeScript تلقائياً. وإذا عدنا الآن وألغينا
00:03:11التعليق، ستلاحظ اختفاء الخطأ وإعادة تحميل تطبيق سطح المكتب تلقائياً،
00:03:16لأن جميع التغييرات من جانب Go (الخلفية البرمجية) تُعيد تجميع التطبيق وتحديثه تلقائياً.
00:03:23الان دعونا نُجري بعض المقارنات لنرى الفروقات بين أطر العمل الثلاثة هذه.
00:03:27أولاً سنلقي نظرة على حجم الحزمة (Bundle Size). يأتي Wails بحجم 52 ميجابايت، وTauri بـ 57 ميجابايت، بينما Electron
00:03:34وكما هو متوقع يأتي بحجم 324 ميجابايت. Wails وTauri أصغر بشكل ملحوظ هنا، وذلك لعدم
00:03:41تضمينهما لمتصفح Chromium داخل الحزمة، وهو أمر متوقع تماماً. ومع ذلك، أود الإشارة إلى أن استخدام
00:03:47عرض الويب الأصلي المتوفر في كل نظام تشغيل (كما يفعل Wails وTauri) قد يجعل احتمالية ظهور اختلافات بين المنصات أكبر.
00:03:51هذه المشكلة أصبحت أقل بكثير في هذه الأيام، ولكنها نقطة يجدر وضعها بالاعتبار. إذن، سينتج كل من Tauri
00:03:57وWails مخرجات متشابهة من حيث حجم الحزمة، لأن كلا الإطارين مصممان
00:04:02بنفس الطريقة تقريباً، على الرغم من استخدامهما لتقنيات مختلفة كلياً تحت الغطاء.
00:04:07الان لنلقِ نظرة على وقت التشغيل، وكما فعلنا في الفيديوهات السابقة حول تطبيقات سطح المكتب،
00:04:12سنقوم بتشغيل كل تطبيق 10 مرات ثم نأخذ المتوسط. حقق Wails زمن
00:04:18395 ميلي ثانية، وTauri 410 ميلي ثانية، وElectron 350 ميلي ثانية. أما بالنسبة للبدء البارد (Cold Start) حيث
00:04:26نمسح الذاكرة المؤقتة في كل مرة، سجل Wails زمن 2,337 ميلي ثانية، وTauri 2,049، بينما كان Electron أسرع قليلاً
00:04:34في الواقع بزمن 1,890 ميلي ثانية. وبالنظر إلى الأداء، وكما هو الحال مع Tauri، فإن أداء وقت التشغيل عند تسجيل
00:04:40الشاشة أفضل بكثير من Electron، ويعود ذلك إلى إعداداتنا حيث نستخدم
00:04:45حزمة التقاط الشاشة الأصلية (CaptureKit) لنظام ماك، فلا تنتقل البيانات عبر الجسر الوسيط، بينما مع Electron نسجل من
00:04:51عرض الويب نفسه ثم ننقل البيانات إلى الخلفية البرمجية، مما يتسبب ببعض الحمل الإضافي.
00:04:56من الناحية الفنية، يمكنك استخدام CaptureKit الأصلي إذا كتبت كود C مخصصاً مع Electron،
00:05:02ولكن هذه هي الطريقة الافتراضية للعمل مع Electron، ولهذا نعتمدها في مقارنتنا
00:05:06اليوم. الان لنلقِ نظرة على تجربة المطور، وهناك سنرى الاختلاف
00:05:11الأكبر حقاً. استمتعت حقاً بالبناء باستخدام Wails، لكن الجزء المتعلق بـ
00:05:15التقاط الشاشة لم يكن بسهولة Tauri. اضطررت لكتابة كود Objective-C للوصول إلى CaptureKit،
00:05:21في حين يمكنك مع Tauri البقاء كاملاً داخل لغة Rust، وذلك لأن Rust تمتلك نظاماً بيئياً كبيراً من
00:05:28المكتبات (Crates) التي تغلف أطر عمل آبل الأصلية. لذا في Tauri، جليبت فقط مكتبة باسم screen
00:05:33capture kit وكانت واجهة البرمجة بالكامل مكتوبة بلغة Rust العادية. لغة Go لا تملك مكتبة جيدة لالتقاط الشاشة
00:05:39حسب ما وجدته، ولكنها تمتلك ميزة Cgo، وهي طريقة مدمجة في Go لتجميع كود C.
00:05:44هذا يعني أنه مع Go يمكنك كتابة كود C أصلي في ملف .m، وتصديره كدوال C عادية، ثم
00:05:50تحديد أطر عمل آبل التي تريد ربطها مع Go. وهذا يتسبب في النهاية بكتابة كود Objective-C حقيقي
00:05:56واستدعاء نفس واجهات آبل التي تستدعيها مكتبة Rust، ولكنك في هذه الحالة تمتلك الكود بالكامل.
00:06:02ينتهي بك المطاف بكتابة حوالي 450 سطراً من كود Objective-C، وهو ما لم يحتاجه تطبيق Rust. لذا إجمالاً، أجدني
00:06:08أميل أكثر نحو Tauri. النظام البيئي لمكتبات Rust أفضل بناءً على ما وجدته،
00:06:14ولكن الأمر يعود في النهاية للتفضيل الشخصي. إذا كنت تفضل التطوير بلغة Go، فإن Wails هو خيار
00:06:18ممتاز حقاً، وإذا كنت تفضل Rust اختر Tauri. ومع ذلك، إن اخترت Wails فقد تضطر
00:06:24لكتابة بعض الأكواد الأصلية لأن النظام البيئي ليس راسخاً بعد. آمل أن يكون قد أعجبكم هذا الفيديو
00:06:29يا رفاق، ويمكنكم الاشتراك للمزيد من هذا المحتوى. وإذا أردتم مشاهدة المزيد من فيديوهات المقارنة
00:06:33لأطر عمل سطح المكتب مثل مقارنة Deno Desktop بـ Electrobun، فقد وضعت رابط فيديو هنا
00:06:39يمكنكم مشاهدته. وإلا، فشكراً جزيلاً للمشاهدة. كنت معكم وورن من Betterstack،
00:06:43وأراكم في الفيديو القادم. ولسوء الحظ يا أصدقاء، قال مايلو: لا مزيد من الفيديوهات لهذا الأسبوع، لذا
00:06:49سأراكم يوم الاثنين.
00:06:50*تُعزف الموسيقى*