應用匯開源思考長篇分享

Electron 入侵:Linux 桌面應用開發的無奈

很長一段時間之內,在 Linux 上開發桌面應用似乎就只有兩種選擇:C++ 的 Qt 或者是 C 的 GTK+,兩者都有著各自的擁躉和核心軟體,例如 KDE 和 Gnome。然而,隨著 Electron 的強勢入侵,這一平分秋色的局勢大有被打破的局勢,但這對我們終端用戶而言,真的是一件好事嗎?

憤怒的用戶

筆者在之前的文章里介紹過最近發布的新版 Linux QQ,相比之前基礎功能都殘缺不全的舊版 Linux QQ 而言,它自然是一次體驗上的飛躍,然而它也有一個致命的缺點不得不提——它是用 Electron 框架開發的,自然,這意味著巨大的內存佔用,筆者使用的電腦配備了 16 GB 的內存,因此對這一點感觸倒不是很深,然而對於那些內存比較吃緊的 Linux 用戶來說,本來他們絞盡腦汁讓內核+桌面環境的內存佔用壓縮到 500 MB 以下,然而只消打開一個 QQ,佔用的內存就比整個系統還要多——這幾乎是無法接受的。

Chrome 在早年幾乎是速度的代名詞,它一經推出就以摧枯拉朽的速度取代了 IE,成為了瀏覽器行業的霸主,然而,自從它成為了這一領域無可置疑的王者之後,它的風評卻反而急轉直下,如今,提起 Chrome,比起速度人們最先想起來的,是它堪稱離譜的內存佔用,這甚至成為了某種流行文化符號,網路上關於 Chrome 吞噬內存的梗圖也是層出不窮:

自然,基於 Chromium 和 Node.js 的 Electron 天生就不可能省內存,除了誇張的內存佔用,這些軟體相比原生軟體的磁碟佔用也要多得多:想想也不難理解,相當於每個軟體裡面都附帶了一個 Chrome 瀏覽器嘛——還要再加上數量相當誇張的 npm 庫,體積怎麼也小不下來。再者,相比與操作系統提供的 UI 渲染框架,基於瀏覽器和前端技術的界面也會耗費更多的資源,對低配用戶十分不友好。

由於 Electron 的這些問題,用戶們對它的「喜愛」也是溢於言表,甚至有人專門做了一個軟體用於檢測系統內安裝了多少個 Electron 應用,諷刺的是,這個檢測器本身也是用 Electron 框架編寫的,不過需要說明的一點是,這裡的 CEF 應用指的是所有使用 libCEF 庫的應用(即使用 Chrome 內核),並不一定是 Electron 應用。

跨平台不易

那麼,既然 Electron 有著這樣那樣的缺陷,為什麼用它開發的應用卻越來越多呢?是他們想故意噁心用戶嗎?實際上,開發者們使用它,比起主動選擇,更多的是出於實在沒得選的無奈。

在 Electron 橫空出世之前,要給各個操作系統開發跨平台的桌面應用是非常困難的一件事,每個系統都擁有自己專屬的開發框架,Windows 有 WPF 和 MFC,Mac 有 Cocoa,而 Linux 則是 GTK+,看到這裡,有的讀者可能會說,Qt 呢?人家可是正經的跨平台框架吧?不過如果你真的用它開發過跨平台程序應該就會明白,Qt 雖然具備理論上的跨平台能力,但想讓它無縫對接各個系統卻十分困難,基本上都離不開大量的修改,更遑論有不少實現只能兼容某個特定的平台,放到別的平台上就成了一團糟了:在這些無奈的現實下,瀏覽器似乎成為了唯一的解決方案,畢竟這是少數幾個可以做到跨平台統一 API 的東西,將其本地化的嘗試最終催生了 Node.js 和 Electron。

在 VSCode 上編寫的 Node.js 項目

倘若我們拋開技術和程序員的個體視角,從整個行業上來看,要找到一群熟悉以上所有這些框架的員工,對企業來說顯然不太現實。而維護數個獨立的開發團隊的代價則過於高昂,這種情況導致了許多公司乾脆選擇放棄用戶群較少的平台,或者是花式擺爛仰卧起坐———就像之前的 Linux QQ 那樣,而 Electron 的出現恰恰填補了這一空缺:只有前端開發能力的程序員也可以開發跨平台桌面程序了,這就大大降低了跨平台所需的人力成本;同時,依靠其優秀的平台獨立性,也可以在最大程度上保障各個平台的體驗相對一致,實際上,最近的 Linux 軟體生態的改善,有相當大的增量就是 Electron 帶來的,許多人對此喜憂參半,喜的是 Linux 桌面生態這麼多年死氣沉沉,終於有了長足的進步;憂的是 Electron 軟體資源佔用誇張,會不會導致 Linux 用戶原本引以為傲的效率淪為空談?

不過在筆者看來,Electron 也並非如此十惡不赦,性能方面也並非無可救藥。例如微軟使用 TypeScript 編寫並優化的 VSCode 就在各個平台都展示出了相當優秀的性能,獲得了程序員們的廣泛好評。事實上,所有框架都有不少編寫水平低下,資源浪費嚴重的應用,誠然,基於瀏覽器的 Electron 有它的原罪,但 VSCode 也證明了它的潛力。況且藉助前端技術的幫助,不需要費多大的力氣就能開發出界面十分美觀的應用,而使用傳統框架實現同樣的效果卻往往要花費數倍的經歷,效果卻往往差強人意。它較低的入門成本也是優勢之一,前端開發者們可以較為輕鬆的上手,對於桌面程序稀缺的 Linux 來說,這無疑是一個好消息。

隨著越來越多的基於 Electron 編寫的程序出現在 Linux 平台上,或許它在數量和功能性上的長處能彌補它在效率和佔用上的不足,至於這一趨勢能否持續,它能否最終贏得用戶們的芳心,就讓我們拭目以待吧。

參考文章及倉庫:
https://github.com/ShirasawaSama/CefDetectorX

對這篇文章感覺如何?

太棒了
5
不錯
2
愛死了
1
不太好
0
感覺很糟
0

You may also like

Leave a reply

您的電子郵箱地址不會被公開。 必填項已用 * 標註

此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

More in:應用匯

應用匯

Linux 圖形計算器讓數學變得更有趣

在學習數學的時候我們會感到數學公式十分抽象難懂,不過 Linux 中的 KAlgebra 計算器是一個很棒的圖形計算器,您可以用它在繪製一些 2D 甚至 3D 的數學模型。將數學公式可視化,不僅讓讓其更直觀,同時讓這些枯燥的數學公式變得有趣起來。