Electron 和當下其他的桌面開發方法相比如何?


作者:柳風
鏈接:https://www.zhihu.com/question/264999651/answer/741654058
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

我大概開發Electron快兩年的時間了,期間也做過一些產品。

首先我們看一下我們常用的客戶端軟件開發都有哪些技術:

首先是Microsoft陣營的

Winform

如雷貫耳,大多數人開發CS程序都是基於Winform去做的,它的有點在於簡單、高效,但是它的缺點在於,如果你想深入的美化UI,需要耗費很大的力氣,對於目前主流的CSS樣式表來講,美化Winform的界面以及自定義控件是需要耗費更多的時間的。

並且,Winform由於其出身,原生是不可以運行在其他操作系統之上的,當然,我已經很久很久很久沒有用過Winform了,所以對其現在的發展現狀並不是很了解。

在開發上,Winforms簡直不要太簡單,如果對UI沒有苛求的話,Visual Studio能夠拖到你懷疑人生。

 

WPF

微軟的又一個殺手鐧,其基於XML+C#+CSS的呈現方式讓它在UI上有了更加靈活的設計寬度,並且對大多數開發者來講,前后端分離式的開發方式能夠更好的組織代碼邏輯,我是先學的Flex,后來才知道有WPF這么個東西存在,瞬間覺得非常親切,不過其子集Silverlight卻沒有在WEB端發揚光大。

同樣,WPF不能運行在其他操作系統,並且在XAML中編寫樣式表,通用性還是不如HTML強,從學習應用的范圍來講,還是HTML更好一些。

在開發上WPF前端X(A)ML、后台C#,與HTML+JS差不多,但是所學的知識點可能更偏向於.NET內部,也有可視化的編輯器,但是我之前用的時候手感比Winform的差太多了,不過熟練了之后基本上都是基於代碼設計,倒也無所謂。

UWP

微軟為了針對移動端市場開放的開發框架,我本人沒有用過,所以不好做太多評價,但是從目前看來,有個老外說的好:UWP is dead because Windows apps are dead,有興趣的同學可以去找找相關資料。

總而言之,如果你的APP只需要運行在Windows下,我認為WPF或者UWP是最好的選擇,畢竟在調用系統原生API上微軟的親兒子們有着巨大的優勢。

沒有開發過,不做討論。

然后是Java陣營

Swing

零幾年學Java的老頭子們幾乎都是從Swing開始學起的,Swing謎一般的默認UI審美觀讓我直接放棄了繼續學習下去的動力

不過我還是利用NetBeans和一個UI控件庫開發出了一個比較漂亮的產品,給我的感覺就是這個家伙實在太重了,我也已經很久很久沒有碰過Swing了,所以對於現在的Swing是個什么情況也不能詳細介紹。

使用NetBeans能勉強達到Visual Studio拖拽控件十分之一的手感吧,其他的我沒試過,對我來講簡直是一種災難……

JavaFx

怎么說呢……說實話我是Java程序員,但是JavaFx出來的時候我根本還沒來得及做任何反應,這個家伙就消失在了大眾的視野中,也許是我孤陋寡聞,也許是圈子不同,我身邊的開發朋友沒有一個在用JavaFx。

他的優點在於可以跨平台,缺點在於整個生態環境非常不好,與Winforms一樣,自定義一些控件相對比較困難。

接下來是Adobe陣營

Air

我開發過很長一段時間的Flex程序,當Air第一次出現在我眼前的時候,給了我眼前一亮的感覺,相對於Swing來講,Air更漂亮,因為有很多Flash控件的積累,可選擇的資源也會更多一些。

但是隨着Flash在瀏覽器上的節節敗退,Air也悄無聲息的消失在了大眾的視野當中。

它的優點在於可以跨平台,可以基於Flash做出很多超級炫酷的動畫特效,但是缺點主要就是效率實在是太低下了,並且在調用操作系統原生API的時候也非常不方便。

開發方式就是硬編碼,雖然有FlexBuilder可以使用,但是簡直是一個災難級別的存在……絕對懷疑人生……

而Flash、Flex本身就可以基於Flash Player獨立運行,所以不再詳細說了。

夾帶着談談Apple

蘋果的桌面開發,我沒有開發過,但是在自己的MBP上玩過,基於Objective-C(或現在的Swift)對於很多程序員來講有點難,現在大多數程序員都是基於C#、Java進行開發,能夠使用C、CPP之類中古語言的程序員着實不多,並且與Windows一樣,不跨平台,所以開發純Objective-C的蘋果桌面程序的程序員真的是少之又少。

優勢嘛,跟Winforms一樣,可以非常方便的調用操作系統底層API,劣勢也一樣,不跨平台、自定義控件比較復雜,可用資源太少。

再來說說QT

QT C++是一個神奇的存在!

我相信現在有非常多的跨平台Desktop Application是基於QT編寫的,它不僅能夠保證跨平台,而且能夠將運行效率最大化。

QT最近在跟車企進行合作,很多監控設備的圖形化展示,甚至是試驗車內部的液晶儀表盤上都使用QT進行開發的,QT最大的優勢就是跨平台!高效率!但是與Objective-C一樣,CPP如同一座小山橫在了眾多server side程序員的面前,如果沒有CPP這道小山橫貫在前,我認為QT是最好的Desktop Application特別是嵌入式終端的UI開發框架。

QT另外有一個優勢在於,它在UI上似乎要比之前幾位要方便一些,在它的QML中甚至可以直接使用JavaScript(當然,Java也內置了JS引擎),同時QT中也包含了大量的標准CSS樣式表可以使用。

雖然這些特性在其他的語言中也有,例如WPF等,但是QT在保證效率的前提下還能做到跨平台就顯得彌足珍貴了!

所以,如果希望自己從事真正意義上的Desktop Application development,QT絕對值得你去學習。

QT有可視化編輯器,但是相比較而言,可能略強於NetBeans的Swing,但是跟VS比起來還是差太遠了,不過大多是實際開發都是基於代碼的,倒也無所謂。聊勝於無吧。

最后,我們聊聊Electron、NW.js

介於NW的日漸式微,所以我更推薦Electron一些。

我是做大數據開發的,但是我的前端技術還不錯,對Sass、Less信手拈來,不基於Bootstrap也能基於Sass或者Less開發類似Bootstrap的UI(雖然審美觀還有待大大的加強),我從AngularJS轉到VUE這個陣營差不多只花了兩天時間,自己可以基於Canvas硬實現流程圖(不基於任何框架),但是我自認還達不到熟練使用D3.js或者開發WebGL的水准。

我不需要QT的高效率, 也不希望渲染個大列表需要很長時間,還希望能夠達到跨平台的目的,對於DirectUI之類更低層的UI技術根本沒有精力去掌握,所以對我來講Electron簡直是最完美的解決方案。

我使用Electron的理由還包括:可以方便的通過Node.JS調用系統API、可以使用SQLite做本地字典項的緩存處理,可以將復雜的計算邏輯放在客戶端進行,從而減輕服務器端的壓力等等。

所以,Desktop Application的開發,我只推薦兩種:

Electron(或NW.js)和QT

其他方案我都不是特別推薦。

當然,如果你的程序只是跑在Windows上,就不用考慮了,WPF是你最好的選擇。

Electron開發不要太簡單,只要會寫HTML,就能寫客戶端,剩下的交給時間慢慢打磨即可,Node.JS雖說不是最終極的優秀中間件,但是目前來看在Desktop這一塊還有發揮余熱的地方。

當然,很多人說,我就是不喜歡Electron的應用,體積大效率低。

無可厚非。

但是我不在乎,因為我的硬件,跑個Electron,綽綽有余的多,十幾年前剛入行的時候還有人跟我扯打孔機呢。

完結

本文所提到的技術,我並不完全掌握,特別是Objective-C,因為是即興回答,我也不可能把上面所有的技術都自己跑一便,所以難免有錯誤,如有筆誤之處,還希望各位看官大佬輕拍指點。

 

 

作者:劉春雷
鏈接:https://www.zhihu.com/question/264999651/answer/848101852
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

2020-10-29 日補充幾張汽車船的圖

可以任意放大縮小旋轉 汽車和甲板 立柱等碰撞檢測 打印預覽 批量打印

 


沒想到很多人喜歡,h5目前的界面能力很強,2019-12-01 補充幾張圖:


主界面功能布局做了調整 窗口折疊 根據html5 網頁版 做的安卓版 增加了雙Bay視圖 增加了Web 3D顯示,放大縮小旋轉拾取 優化了一些其他功能 各種不合規積載檢測

 


 

下面是原始回答:


 

我們做船舶配載儀就是用WPF寫的,采用了MVVMLight及Ribbon風格

后來我們想要做成Web版,就啟動了Web化的任務,經過幾個月功能基本已經移植完成了

底層算法用c++寫

服務器端:用Java調用C++

前端:采用html5


優點:

  1. wpf能實現的功能,html5 基本都能夠實現
  2. 想實現單機版只需要用electron包裝一下
  3. 生態好 以前寫wpf就我們兩個人 現在web端已經4個人了
  4. 我們在安卓移動端做了嘗試,采用cordova 很方便的實現了移植,大概需要幾天時間
  5. 還可以享受WebGL在3D方面的福利

回答樓主問題:

(1) 從Wpf轉Html5 還是很快的,完全沒壓力,我就是直接上手寫的

(2)建議樓主學一學,做為程序員終歸要學習幾幾幾幾種語言的 ~ ~


下面是網頁版的幾張截圖

多皮膚實時切換 集裝箱船 任意放大縮小 拖動

2020.3.3號 補充幾張用h5 做的安卓學習項目的截圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM