作者:韋易笑
鏈接:https://www.zhihu.com/question/24461881/answer/140104855
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
短平快的話:
1. Electron:js開發(fā)界面,可用cpp擴(kuò)展
2. PyQt5: Py開發(fā)界面,可用cpp擴(kuò)展
3. QWebView:js開發(fā)界面,py cpp做后端(非界面部分)
比開發(fā)速度,上面三個(gè)方案完爆c#
Qt5以后,Qt全面使用gpu加速繪制。
微軟自己都很少用 WPF,做個(gè) vscode還要去用 electron。
界面腳本化是大勢(shì)所趨,弄個(gè)界面就該快,改兩行代碼按個(gè)快捷就該跑起來(lái),避免改個(gè)文件一編譯就等半天,或者出個(gè)bug找兩天:
編碼-測(cè)試-編碼 這個(gè)核心工作流越短越好。上面三個(gè)方案都跨平臺(tái),況且人的時(shí)間本來(lái)就有限,上面幾門技術(shù)學(xué)了你不虧,其他好多地方都用得上,關(guān)鍵是開發(fā)效率都比c#高。
再比較下性能:https://www.youtube.com/watch?v=8O-0k4MLKs8
Qt 5.6 MinGW 和 .NET 4.5 WPF 跑同一個(gè)測(cè)試,Qt 的速度是 WPF的兩倍!
主要是兩個(gè)技術(shù)序列:
1. 基于web技術(shù)的桌面產(chǎn)品,比如vscode,atom,Slack,網(wǎng)易云音樂(lè),釘釘之類的成熟應(yīng)用挺多,文檔也豐富,問(wèn)問(wèn)題有人答,搜問(wèn)題搜得到。


短短兩年間,這么多來(lái)自微軟,F(xiàn)acebook, Slack,Docker等公司的桌面產(chǎn)品使用 Electron開發(fā)出來(lái),更多的可以到:Electron Apps自己看。
2. 基于PyQt的桌面產(chǎn)品:DropBox client,R Studio,Calibre,Eric Python IDE, Spyder,PDF Catalog Creator for Magento,出活快,寫小工具用它根飛一樣,做專業(yè)系統(tǒng)可以和C++Qt無(wú)縫整合。

R Studio

R Studio

Spyder

Spyder
上面兩張 R Studio / Spyder 的截圖,PyQt做的,不算簡(jiǎn)單吧,這界面,想看酷炫的可以去看 PyQt的 demo,不要覺(jué)得 PyQt有多大, DropBox客戶端打包出來(lái) 24MB,比很多手機(jī)app都小。
Electron 內(nèi)核整合了 NodeJS,所有 NodeJS能用的模塊 js都能用,比如:
node-ffi/node-ffi模塊,可以讓你直接調(diào)用 C++寫的動(dòng)態(tài)庫(kù),不需要用C++寫個(gè)node擴(kuò)展:
varffi=require('ffi');varlibm=ffi.Library('libm',{'ceil':['double',['double']]});libm.ceil(1.5);// 2// You can also access just functions in the current process by passing a nullvarcurrent=ffi.Library(null,{'atoi':['int',['string']]});current.atoi('1234');// 1234
Python/PyQt也有類似的接口。
WPF線上產(chǎn)品不考慮,不要看著你們辦公室沒(méi)人用xp就以為天下沒(méi)xp了,你去二三線城市的網(wǎng)吧里看看,大范圍的xp?,F(xiàn)在這個(gè)時(shí)間點(diǎn)國(guó)內(nèi)還有 45%的電腦跑xp,這問(wèn)題三年內(nèi)不會(huì)緩解,你要做線上系統(tǒng)你基本不可能拋棄這群用戶,做內(nèi)部工具又沒(méi)有上面三個(gè)快捷,更何況跨平臺(tái)問(wèn)題。
雖然我承認(rèn) C#是一門好語(yǔ)言,但堆邏輯還是沒(méi)有 js,python之類的快,且不管 C#還是 WPF,應(yīng)用面太窄,學(xué)會(huì)了將來(lái)能用的地方也不多,不值得投入。而上面我給你推薦的三套方案,所涉及到的技術(shù)應(yīng)用范疇都廣的多,比如你學(xué)會(huì)了js/Electron,可以無(wú)縫把你桌面應(yīng)用遷移到 web上,比如同時(shí)開發(fā)web版本,可以稍微該一下做成移動(dòng)app,學(xué)了python/qt,也有好多別的事情可以做。
所以,學(xué)一個(gè)東西要考慮它本身的價(jià)值
ps:用過(guò)win32,owl,vcl,mfc,c#,tk,wx,手?jǐn)]DirectUI,qt
不會(huì)坑你