Wails: Electron को पछाड़ने के लिए डेस्कटॉप ग्रेड ऐप्स पर Golang का बड़ा दांव

BBetter Stack
Computing/SoftwareInternet Technology

Transcript

00:00:00Wails एक क्रॉस-प्लेटफॉर्म टेक्नोलॉजी है जो आपको Go में डेस्कटॉप-ग्रेड ऐप्स बनाने देती है।
00:00:04डेस्कटॉप कंपैरिजन के कई सारे वीडियो बनाने के बाद channel पर इसकी
00:00:08बहुत बार मांग की गई है। तो आज मैं आपको Wails का इस्तेमाल करके डेस्कटॉप-ग्रेड ऐप्स बनाना सिखाऊंगा
00:00:13और इसकी तुलना Electron और Tauri जैसे frameworks से करूंगा। हम एक
00:00:17डेस्कटॉप वीडियो रिकॉर्डर बनाने की प्रक्रिया से गुजरेंगे, जो हमने पिछले वीडियो में भी किया था, और file size,
00:00:22performance और developer experience जैसी चीज़ों की तुलना करेंगे। और Wails मेरे लिए भी बिल्कुल नया है, तो हम
00:00:27इसमें साथ मिलकर सीखेंगे। Wails काफी हद तक Tauri की तरह ही काम करता है, लेकिन
00:00:36इसका backend Rust के बजाय Go में है। आप अभी भी web technologies का उपयोग करके web view में front-end बनाते हैं
00:00:41और फिर native APIs को कॉल करते हैं जिन्हें Golang द्वारा मैनेज किया जाता है। इसका मतलब है कि आप एक ऐसा application compile कर सकते हैं जो
00:00:47Mac और Windows दोनों के साथ संगत है। लेकिन Electron के विपरीत, Wails में browser embed नहीं होता। इसके बजाय
00:00:52यह Tauri की तरह ही हर platform के native rendering engine का पुनरुपयोग करता है। तो bundle size
00:00:58तकनीकी रूप से काफी छोटा होना चाहिए, लेकिन हम आगे तुलना करते समय इसे देखेंगे।
00:01:03और अगर आपको ऐसा content पसंद आता है दोस्तों, तो और जानकारी के लिए subscribe करें। तो यह वह screen recording
00:01:07tool है जिसे मैंने Wails के साथ विकसित किया है और मैंने यही काम Electron और Tauri में भी किया है। हम
00:01:12वह screen चुनेंगे जिसे हम record करना चाहते हैं। record पर क्लिक करें। आप mouse को घुमा सकते हैं। असल
00:01:16desktop app खुद recording में दिखाई नहीं देगा। मैं stop दबाऊंगा। फिर आप वह screen देख सकते हैं जो मैंने अभी
00:01:21record की है। अगर मैं चाहता तो इसे कट कर सकता था और फिर सीधे अपने machine में video save करने के लिए export to MP4 पर क्लिक कर सकता था।
00:01:27तो अगर हम इसके build के अंदर देखें, तो आप देखेंगे कि यह बहुत ही मिलता-जुलता
00:01:32setup है जिसकी आप Electron पर उम्मीद करते हैं। हमारे पास एक front-end folder में सभी front-end files हैं
00:01:36और फिर हमारे पास entry file है। और इस मामले में यह main.go नाम की एक Go file है और इसके अंदर
00:01:41हमारे पास एक main function है। दोबारा, आप Electron के अंदर भी ऐसा ही कुछ देखने की उम्मीद करेंगे और हम
00:01:47title, width और height declare करने, background color सेट करने जैसी चीजें कर सकते हैं और फिर
00:01:52खास तौर पर Mac के लिए चीज़ें सेट कर सकते हैं। तो अगर आप Mac और Windows के बीच अंतर चाहते हैं, तो वह पूरी तरह से
00:01:57संभव है। अब अगर हम यहाँ source के अंदर front-end में देखें, तो आप असल में सारा
00:02:02React code देखेंगे। तो अगर हम app.tsx के अंदर देखें, यह बस मानक React code है, सिवाय इसके कि हम
00:02:09उन APIs को कॉल कर रहे हैं जो Go की तरफ परिभाषित हैं। तो अगर हम यहाँ इस import API को देखें और पूरी file में इसका उपयोग देखें,
00:02:16तो आप देख सकते हैं कि हम API.onrecording finished, onrecording failed, start recording कर रहे हैं और वह API
00:02:22Wails द्वारा खुद-ब-खुद generate हो जाती है। तो अगर हम खुद API के अंदर देखें, तो आप देख सकते हैं कि सभी core
00:02:27functions इस file से आ रहे हैं, wails.js slash go slash main slash app। अब अगर हम इसके अंदर
00:02:33देखें, तो आप देख सकते हैं कि यह file automatically generate हुई है और हमारे पास ऊपर Welsh और English है,
00:02:39और ऐसा इसलिए है क्योंकि मानो या न मानो, Wails का निर्माता Welsh है। तो हमारे पास यहाँ ये सभी functions हैं
00:02:43जैसे export video, list sources, request screen access, वो सभी चीजें जो आपको एक
00:02:49screen recording tool के लिए चाहिए होंगी। तो अगर हम यहाँ app.go में Go की तरफ जाएं और फिर
00:02:54list sources को comment out करके file save कर दें, तो आप देखेंगे कि अचानक हमें API.ts के अंदर एक error मिलता है क्योंकि अब
00:02:59list sources मौजूद नहीं है, और ऐसा इसलिए है क्योंकि हम wails.dev चला रहे हैं। इसलिए जब भी Go file के अंदर
00:03:05कोई बदलाव होता है, तो यह अपने आप TypeScript definitions को re-render कर देता है। तो अगर हम अब वापस जाएँ और फिर
00:03:11इसे वापस uncomment कर दें, तो आप देखेंगे कि अब error गायब हो जाता है और फिर desktop app असल में reload हो जाता है
00:03:16क्योंकि Go side यानी back end के सभी बदलाव अपने आप compile और application को
00:03:23re-render कर देते हैं। अब इन तीनों frameworks के बीच अंतर देखने के लिए कुछ तुलना करते हैं।
00:03:27सबसे पहले हम bundle size को देखेंगे। Wails 52 megabytes पर आता है, Tauri 57 megabytes पर और Electron
00:03:34बिना किसी हैरानी के 324 मेगाबाइट। Wails और Tauri यहाँ काफ़ी छोटे हैं क्योंकि वे
00:03:41Chromium को bundle नहीं करते, इसलिए यह बिल्कुल अपेक्षित ही था। हालांकि, मैं कहूंगा कि हर platform के native
00:03:47web view का उपयोग करने से (जो कि Wails और Tauri करते हैं) इस बात की संभावना बढ़ जाती है कि आपको कुछ platform अंतर देखने को मिलें।
00:03:51आजकल यह बहुत बड़ी समस्या नहीं है, लेकिन बस एक ऐसी बात है जिसे ध्यान में रखना चाहिए। तो मूल रूप से Tauri और
00:03:57Wails bundle size के मामले में समान artifacts तैयार करेंगे क्योंकि दोनों frameworks की
00:04:02संरचना लगभग एक जैसी ही है, भले ही वे अंदरूनी तौर पर बेहद अलग तकनीकों का उपयोग कर रहे हों।
00:04:07अब आइए startup time पर नज़र डालते हैं, और जैसा कि मैंने desktop apps पर पिछले वीडियो में किया था, हम
00:04:12इनमें से प्रत्येक app को 10 बार launch करेंगे और फिर बस औसत निकाल लेंगे। Wails 395
00:04:18milliseconds पर आता है, Tauri 410 milliseconds पर और Electron 350 milliseconds पर। अब cold starts की बात करें जहाँ हम
00:04:26हर बार cache को साफ़ करते हैं, Wails को 2,337 मिलते हैं, Tauri को 2,049 और Electron असल में थोड़ा
00:04:34तेज़ निकल जाता है 1,890 पर। अब performance को देखें, तो Tauri की तरह ही screen record करते समय runtime
00:04:40performance Electron की तुलना में बहुत बेहतर है, और ऐसा असल में हमारे setup के कारण है जहाँ हम Mac से
00:04:45native capture kit का उपयोग करते हैं, इसलिए कोई भी data bridge के ऊपर से travel नहीं करता है। जबकि Electron के साथ हम खुद
00:04:51web view से record करते हैं और फिर data को back end पर pass करते हैं, जिसमें थोड़ा overhead जुड़ जाता है।
00:04:56तकनीकी रूप से आप native capture kit का उपयोग कर सकते हैं यदि आप Electron के साथ कुछ custom C code लिखते,
00:05:02लेकिन Electron के साथ काम करने का यह default तरीका है, इसलिए आज हम इसकी तुलना इसी से कर रहे हैं।
00:05:06अब आइए developer experience पर नज़र डालते हैं और यहीं पर हमें सबसे बड़ा
00:05:11अंतर देखने को मिलेगा। मुझे असल में Wails के साथ काम करने में बहुत मज़ा आया, हालांकि मैं कहूंगा कि screen capture वाला
00:05:15हिस्सा Tauri की तरह आसान नहीं था। मुझे capture kit को access करने के लिए Objective-C code लिखना पड़ा,
00:05:21जबकि Tauri में आप पूरी तरह से Rust में ही रह सकते थे, और ऐसा इसलिए है क्योंकि Rust के पास Apple के native frameworks को लपेटने वाले
00:05:28community crates का एक बड़ा ecosystem है। तो Tauri में मैंने बस screen capture kit नाम का एक crate इस्तेमाल कर लिया
00:05:33और पूरा recording API सामान्य Rust बन गया। Go के पास screen capture kit के लिए कुछ भी अच्छा नहीं था जो मुझे मिल सके,
00:05:39लेकिन इसके पास CGo नाम की चीज़ है, जो C code को compile करने का Go का built-in तरीका है।
00:05:44इसका मतलब है कि Go के साथ आप एक .m file में बस native C लिख सकते हैं, इसे साधारण C functions के रूप में expose कर सकते हैं और फिर
00:05:50Go को बता सकते हैं कि Apple के किस framework से link करना है। तो इसका मतलब है कि आप अंततः असली Objective-C लिख रहे होते हैं
00:05:56और उन्हीं Apple APIs को कॉल कर रहे होते हैं जिन्हें Rust crate करता है, लेकिन इस बार पूरे code के मालिक आप होते हैं। यह असल में
00:06:02लगभग 450 पंक्तियों का Objective-C code बन गया, जो Rust app में बिल्कुल नहीं था। तो कुल मिलाकर मैं
00:06:08थोड़ा अधिक Tauri की ओर झुक रहा हूँ। मुझे जो मिला उसके अनुसार Rust crates का ecosystem बेहतर है,
00:06:14लेकिन वास्तव में यह आपकी पसंद पर निर्भर करता है। अगर आपको Go में development करना पसंद है, तो Wails एक बहुत ही
00:06:18बढ़िया विकल्प है और अगर आपको Rust पसंद है तो बस Tauri चुनें। हालांकि अगर आप Wails चुनते हैं तो आपको
00:06:24कुछ native code लिखना पड़ सकता है क्योंकि इसका ecosystem उतना स्थापित नहीं है। खैर, उम्मीद है आपको यह वीडियो पसंद आया होगा
00:06:29दोस्तों और आप ऐसे ही और content के लिए subscribe कर सकते हैं और अगर आप desktop frameworks के और तुलनात्मक वीडियो देखना चाहते हैं
00:06:33जैसे जहाँ हमने Deno desktop की Electrobun से तुलना की थी। मैंने ठीक यहाँ एक वीडियो का link दिया है
00:06:39जिसे आप देख सकते हैं। वरना देखने के लिए बहुत-बहुत धन्यवाद। मैं Betterstack से Warren रहा हूँ
00:06:43और मैं आपको अगले वीडियो में मिलूँगा। और दुर्भाग्य से दोस्तों, Milo ने इस हफ्ते और वीडियो न बनाने को कहा है, इसलिए
00:06:49मैं आपसे सोमवार को मिलूँगा।
00:06:50*संगीत बजता है*

Key Takeaway

Wails, Golang और प्लेटफॉर्म के नेटिव वेब व्यू का उपयोग करके Electron की तुलना में बंडल साइज़ को 324 MB से घटाकर 52 MB कर देता है और बेहतर रनटाइम परफॉरमेंस देता है, हालांकि नेटिव फीचर्स के लिए कुछ कस्टम CGo कोड लिखना पड़ सकता है।

Highlights

  • Wails का बंडल साइज़ 52 MB है, जो Tauri (57 MB) से थोड़ा छोटा और Electron (324 MB) से काफी कम है।

  • Wails का वार्म स्टार्ट-अप टाइम 395 ms और कोल्ड स्टार्ट-अप टाइम 2,337 ms है, जबकि Electron का कोल्ड स्टार्ट-अप सबसे तेज़ 1,890 ms है।

  • Electron से अलग, Wails और Tauri एम्बेडेड क्रोमियम ब्राउज़र के बजाय प्लेटफॉर्म के नेटिव वेब व्यू का उपयोग करते हैं।

  • Wails Go फ़ाइलों में बदलाव होने पर ऑटोमैटिकली टाइपस्क्रिप्ट डेफ़िनेशन्स को री-रेंडर और कंपाइल कर देता है।

  • Wails में स्क्रीन कैप्चर के लिए CGo के ज़रिए लगभग 450 पंक्तियों का नेटिव Objective-C कोड लिखना पड़ा, जबकि Tauri में कम्युनिटी क्रेट्स के कारण केवल Rust कोड से काम हो गया।

Timeline

Wails की वास्तुकला और कार्यप्रणाली

  • Wails एक क्रॉस-प्लेटफॉर्म फ्रेमवर्क है जो Go बैकएंड और वेब-बेस्ड फ्रंटएंड का उपयोग करता है।
  • Electron के विपरीत Wails में क्रोमियम ब्राउज़र एम्बेडेड नहीं होता है।

Wails का बैकएंड Rust के बजाय Golang पर आधारित है, जबकि फ्रंटएंड के लिए मानक वेब तकनीकों का उपयोग होता है। यह हर ऑपरेटिंग सिस्टम के नेटिव रेंडरिंग इंजन का पुनरुपयोग करता है। इससे कंपाइल किया गया एप्लिकेशन Windows और Mac दोनों के लिए संगत बनता है और बंडल साइज़ काफी छोटा रहता है।

React और Go API का एकीकरण

  • Wails में Go बैकएंड में किए गए बदलावों के आधार पर स्वतः टाइपस्क्रिप्ट बाइंडिंग्स जनरेट होती हैं।
  • बैकएंड कोड अपडेट होते ही एप्लिकेशन ऑटोमैटिकली री-कंपाइल और री-लोड हो जाता है।

स्क्रीन रिकॉर्डिंग ऐप के फ्रंटएंड में मानक React कोड का उपयोग होता है जो Go साइड पर परिभाषित APIs को कॉल करता है। main.go फाइल में विंडो टाइटल, आकार और प्लेटफॉर्म-विशिष्ट सेटिंग्स कॉन्फ़िगर की जाती हैं। wails.dev कमांड चलाने पर Go साइड का कोई भी फ़ंक्शन अपडेट या कमेंट आउट होते ही फ्रंटएंड की टाइपस्क्रिप्ट डेफिनेशन्स में तुरंत बदलाव दिखते हैं।

बंडल साइज़, स्टार्ट-अप टाइम और परफॉरमेंस की तुलना

  • Wails का बंडल साइज़ 52 MB है, जो Tauri के 57 MB के करीब है और Electron के 324 MB से बहुत छोटा है।
  • औसत वार्म स्टार्ट-अप टाइम में Wails 395 ms, Tauri 410 ms और Electron 350 ms का समय लेता है।
  • Wails और Tauri स्क्रीन रिकॉर्डिंग के दौरान Electron से बेहतर रनटाइम परफॉरमेंस देते हैं।

Wails और Tauri बंडल में क्रोमियम को शामिल नहीं करते, जिससे उनका साइज़ काफी छोटा रहता है। कोल्ड स्टार्ट में Cache साफ़ करने पर Wails 2,337 ms, Tauri 2,049 ms और Electron 1,890 ms समय दर्ज करता है। Mac के नेटिव कैप्चर किट का सीधे उपयोग करने के कारण Wails और Tauri में डाटा को वेब व्यू से बैकएंड में पास करने का ओवरहेड नहीं होता, जिससे स्क्रीन रिकॉर्डिंग परफॉरमेंस बेहतर होती है।

डेवलपर एक्सपीरियंस और इकोसिस्टम का अंतर

  • Wails में Apple के सिस्टम फ्रेमवर्क तक पहुँचने के लिए CGo के माध्यम से Objective-C कोड लिखना पड़ता है।
  • Tauri के पास Rust कम्युनिटी क्रेट्स का एक समृद्ध इकोसिस्टम मौजूद है।

स्क्रीन कैप्चर किट का उपयोग करने के लिए Wails में Go की CGo सुविधा से .m फाइल में लगभग 450 पंक्तियों का C/Objective-C कोड लिखना आवश्यक हुआ। इसके विपरीत, Tauri में पहले से मौजूद screen_capture_kit क्रेट की वजह से अलग से C कोड लिखने की आवश्यकता नहीं पड़ी। इकोसिस्टम की परिपक्वता के मामले में Tauri का पलड़ा थोड़ा भारी है, लेकिन Golang डेवलपर्स के लिए Wails एक शक्तिशाली विकल्प है।

Community Posts

View all posts