桌面應(yīng)用開發(fā)技術(shù)對(duì)比,你明白了嗎?
前言
因個(gè)人興趣,想著開發(fā)一個(gè)桌面應(yīng)用軟件,其具體定位是:RPA,相關(guān)的商業(yè)軟件有很多,我了解使用過(guò)的幾個(gè):UiPath、UiBot、影刀 RPA。
什么是 RPA?其全稱為 Robotic Process Automation(機(jī)器人流程自動(dòng)化),簡(jiǎn)單而言就是讓計(jì)算機(jī)幫助我們執(zhí)行各種重復(fù)性高的工作,對(duì)于行政、金融、政府等人力密集型部門,RPA 是很好的助力。
最近幾年,RPA 相關(guān)賽道的公司融資都很猛,通常都是億級(jí)的融資,因?yàn)槲抑霸诠矩?fù)責(zé)過(guò)自動(dòng)化工具相關(guān)的工作,所以一直有關(guān)注自動(dòng)化相關(guān)的各種技術(shù),其中 RPA 是我關(guān)注的重點(diǎn),觀察下來(lái),各種 RPA 商業(yè)應(yīng)用其技術(shù)實(shí)現(xiàn)難度不算特別大,雖然其功能很多,但感覺慢慢從基礎(chǔ)功能搞,還可以夠得著,所以一直有打算開發(fā)一個(gè)的想法。
這篇文章是第一步,對(duì)比一下目前桌面端技術(shù)棧,做技術(shù)選型。
PS: 熟悉我的朋友知道我之前使用 Electron+Vue 開發(fā)過(guò)抖直播這個(gè)應(yīng)用,但 RPA 軟件需要更多系統(tǒng)層的支持,我在調(diào)研前,會(huì)疑惑 Electron 對(duì)系統(tǒng) API 的兼容情況以及是否有更好的方案,所以還是花時(shí)間調(diào)研了一下。
當(dāng)然,做事情前先明確目標(biāo):
- 我希望可以構(gòu)建出一個(gè)跨平臺(tái)的 RPA 桌面應(yīng)用,目前多數(shù)商業(yè) RPA 軟件都局限在 Windows 平臺(tái)(即只有 exe 安裝包)。
- 因?yàn)?RPA 需要很多系統(tǒng)級(jí)的功能,所以我希望可以比較輕松的試驗(yàn)系統(tǒng) API。
- 因?yàn)闀r(shí)間、精力和能力的問(wèn)題,我希望可以基于自己已有技術(shù)棧之上來(lái)開發(fā)。
常見桌面端開發(fā)技術(shù)棧
通過(guò)微信、QQ 等各種桌面端應(yīng)用,可以了解目前開發(fā)桌面端的主流技術(shù)棧,簡(jiǎn)單總結(jié)一下:
1.使用 C#+WPF 依舊是開發(fā) Windows 桌面應(yīng)用的主流選擇,其優(yōu)點(diǎn)是:比較成熟,參考資料比較多,其缺點(diǎn)是:性能一般,需要用戶主動(dòng)安裝 net 庫(kù),雖然很多軟件會(huì)直接提供下載,然后讓用戶安裝,但依舊是一個(gè)坎,此外 WPF 只支持 Windows 平臺(tái),與目標(biāo)不符。
2.C+++QT 也是很多人的選擇,QT 是否成熟,但比較重,適合開發(fā)大型應(yīng)用,對(duì)于個(gè)人開發(fā)者而言,效率不高,此外我除了大學(xué)時(shí)用 C++ 參加過(guò)算法比賽外,很少再使用過(guò)。
3.在 Windows 平臺(tái)下,國(guó)內(nèi)多個(gè)大眾應(yīng)用,如微信、QQ、百度網(wǎng)盤都使用了 C+++ 類duilib 的形式進(jìn)行開發(fā)(類 duilib 的意思是,基于開源的 duilib 這個(gè) Windows GUI 進(jìn)行了二開),這種方式出的桌面應(yīng)用,性能較高而且包的體積下,是專業(yè)團(tuán)隊(duì)比較好的選擇,但不適合我這個(gè)項(xiàng)目,因?yàn)?RPA 并不要求太高的性能,而且我希望一份代碼可以跨平臺(tái)使用。
4.影刀等商業(yè) RPA 軟件使用了 C+++CEF 的形式開發(fā),CEF(Chromium Embedde FrameWork)與 Electron 定位類似,基于 Chromium,讓開發(fā)者可以使用前端技術(shù)棧來(lái)構(gòu)建桌面應(yīng)用,跨平臺(tái),就是 CEF 資料比較少,還需要 C++ 等知識(shí),因?yàn)槭菍?duì)標(biāo)軟件使用的技術(shù),所以加入候選技術(shù)棧。
5.VScode、Github 桌面端等使用 Electron 開發(fā),與 CEF 類似,Electron 讓我們使用前端技術(shù)便可以開發(fā)桌面應(yīng)用,其優(yōu)點(diǎn)是:資料很多、開發(fā)效果比較 OK,缺點(diǎn)是慢,而且對(duì)于需要比較多系統(tǒng) API 的兼容因沒(méi)有對(duì)標(biāo)軟件,所以不太好確定。
6.Flutter 是 Google 推出了全平臺(tái)開發(fā)框架,支持 windows、macos、android、ios 甚至是汽車中的系統(tǒng),調(diào)研下來(lái)的結(jié)論是,F(xiàn)lutter 對(duì)跨平臺(tái)的支持還非常早期,很多系統(tǒng)層的 API 并不支持,生態(tài)也剛起步,與 npm 比不了,很多東西可能要自己造,所以也不考慮。
CEF 與 Electron 的比較
CEF github: https://github.com/chromiumembedded/cef (1.6k star) Electron github: https://github.com/electron/electron (101k star)。
從 Github 上看,Electron 的活躍度遠(yuǎn)高于 CEF,包括:版本更新頻率(解決 issue 的速度、新功能的開發(fā)速度)、社群活躍度(資料豐富度)。
那為啥有些商業(yè)產(chǎn)品要選擇 CEF 呢?其優(yōu)勢(shì)在哪?對(duì)目前想開發(fā)的項(xiàng)目來(lái)說(shuō),是否重要?
相比于 Electron,CEF 支持 Windows XP 系統(tǒng),提供的很多比較底層的 C++ API 方便你使用系統(tǒng)級(jí)能力,而且也很方便與 Native UI 框架融合使用,實(shí)現(xiàn)更近似本地應(yīng)用的應(yīng)用。
簡(jiǎn)單而言,使用 CEF,相比于 Electron 可以更輕松的做的更像原生軟件,除了不支持 Windows XP 這個(gè)硬傷,Electron 其實(shí)可以通過(guò) C++ 的方式調(diào)用更多系統(tǒng)級(jí)的原生能力,但這要求你對(duì) Electron 框架源碼比較熟悉,當(dāng)然也要會(huì)寫 C++ 代碼。
那 Windows XP 系統(tǒng)目前占用量大嗎?查閱了一下,Windows XP 在 2020 年,市場(chǎng)占有率已經(jīng)低于 1%,所以我還是偏向于選擇 Electron 進(jìn)行 RPA 桌面應(yīng)用的開發(fā)。
所以剩余的問(wèn)題,便是加強(qiáng)對(duì) Electron 的把控感。
Electron 開發(fā)需要考慮的問(wèn)題
1.因?yàn)?Electron 本身架構(gòu)的原因,Electron 打出來(lái)的包會(huì)比較大,但就目前個(gè)人電腦的性能而言,也不算什么特別大的問(wèn)題,就像現(xiàn)在手機(jī)游戲一樣,反正手機(jī)性能過(guò)剩,一些比較難搞的優(yōu)化直接就放棄了,但在開發(fā)時(shí),還是盡量精簡(jiǎn) require,從而讓 Electron 打出的包小一點(diǎn)。
2.Electron 對(duì)源碼是沒(méi)有保護(hù)的,即你開發(fā)的軟件,很容易別人逆向分析,有幾個(gè)解決方案,除了方案 c,都可以逆向破解,這些操作只是讓可破解的人少一點(diǎn)而已(當(dāng)然,最安全的方式是你的軟件沒(méi)有任何價(jià)值,放到 Github 都沒(méi)人 fork)。
- a. 使用 C++ 編寫核心邏輯,發(fā)布時(shí),C++ 是編譯后的二進(jìn)制文件
- b. 使用 wasm 編寫核心邏輯,發(fā)布時(shí),也是二進(jìn)制內(nèi)容
- c. 核心邏輯放在后端
- d. 使用 bytenode 將代碼轉(zhuǎn)成字節(jié)碼
3.Electron 對(duì)系統(tǒng)層能力的使用可能比較弱,此時(shí)需要求助 Python、C++、C# 等語(yǔ)言,通過(guò) ffi-napi 庫(kù)可以讓 Node.js 使用 C++ dll,通過(guò) electron-edge-js 庫(kù)可以讓 Node.js 使用 C# dll。
參考
- 開發(fā)桌面應(yīng)用是用 flutter 還是用 electron
https://www.zhihu.com/question/390186321
- macOS 上 Flutter Desktop 與 Electron 的性能對(duì)比
https://juejin.cn/post/7018450473292136456
- 對(duì)比跨平臺(tái)客戶端方案:Electron 和 CEF
https://blog.csdn.net/caperxi/article/details/115901659
- 桌面端框架 Electron 使用問(wèn)題整理和總結(jié)
https://juejin.cn/post/6844904072743501831