vc++ mfc 非客户区 描绘线_决战客户端技术
原文鏈接-決戰客戶端技術
最近經常有小伙伴問我要做一個客戶端, 該怎么弄. 這個問題問得很粗獷, 但是實際上客戶端的選型是一個很細的問題. 從大學到現在, 也弄了不少的客戶端, 從公司主營炒股專業客戶端, 到內部項目使用的OA客戶端, 還有大學的時候為了畢業而弄的QT, 各式各樣, 這里就給大家講解一下, 我所了解的幾種客戶端的選型(這里主要針對windows,也會提及一些跨平臺技術).
windows下的客戶端都是基于win32, 在這基礎上, 我們可以細分為, 原生win32, MFC, C#(語言封裝), 高級win32-duilib, QT, CEF, electron(nwjs) 大體就這幾種了, 其中很多是重合的, 下面我們就每個都講一講優劣.
原生win32
- 優點
上面也說了, windows下所有的東西, 都是win32的, 它就像建房子用的磚一樣, 可以用它做出任何我們想要的東西, 幾乎是無所不能, 而且它是基于消息驅動的, 性能非常高.
- 缺點
優點很好, 缺點也非常明顯, 太底層了, 全部都是C的接口, 如果要實現復雜的效果, 所有的東西都要自己寫, 會把代碼寫得非常復雜, 不是簡簡單單就能弄好的, 而且維護成本巨大, 非常不建議使用, 如果是中小公司, 要做客戶端, 沒有一定的實力, 千萬不要去踩這個坑.
MFC
MFC是微軟自己開源的一套UI框架, 大多是基于自己做的東西,給出了一套通用的解決方案. 優點 封裝度高, 大多我們要的組件, 都有現成的使用, 修改起來也方便, 而且也是用的消息驅動型, 性能高. 缺點 雖然說是C++的, 但是里面C和C++混著用, 腦子有點不好使, 而且除開那些共有組件之外, 其他的組件, 寫起來也是很麻煩, 對程序員的要求也是比較高的, 現在很少有人再使用MFC了, 至少我身邊算是比較少的.
csharp
這個就不能說優缺點了, 語言級別的不一樣, 雖然底層都調用win32的東西, 但是已經是完全面向對象的封裝了, 這個運行機制也不一樣, 消息已經都被封裝了, 更多的是回調和反射. 整體來說對程序員友好, 文檔齊全, 寫起來很流暢. csharp是一門非常優雅的語言, 用它來寫客戶端也是很流暢的, 而且csharp有很多第三方組件, 收費的, 不收費的, 國內的, 國外的都可以做到開箱即用, 方便極致. 當然也有不好的地方, 就是依賴于.net, 所有的用戶必須安裝.net, 而且還有不同版本的兼容問題, 如果用戶的環境是不受你控制的, 建議還是不要用的好.
高級win32-duilib
duilib是我特別想向大家推薦的一個C++UI庫, 做的非常的好, 提供了類似于html, css類似的封裝, 當然它是基于xml的, 我司的主營炒股軟件就是自己維護的一個duilib庫. 而且許多像騰訊, 網易都有使用. 現在主流的方案都是duilib + CEF, 或者win32 + CEF這種混合的解決方案.
- 優點
高度封裝, 類html的文件, 我們可以在上面快速實現復雜的效果, 同時它支持自繪, 可以擴展我們想要的功能, 消息驅動型, 性能高, 如果是中小企業, 并且對UI的性能以及效率要求非常高, 這里強烈推薦此方案.
- 缺點
文檔缺失, 幾乎各個大的公司都維護了一套自己的duilib版本, 缺少統一的標準, 在接觸第一版本的duilib的時候, 幾乎都是看代碼查特性. 對開發者要求也是挺高的, 如果想要重度使用, 幾乎要通讀整個庫的代碼的, 不過這個庫封裝的非常好, 也很簡潔, 讀懂不是什么難事.
QT
- 優點
跨平臺, 面向對象, 性能高, 非常良好的文檔, 類html的布局, 幾乎能實現你想要的所有的東西.
- 缺點
學習路徑比較陡峭, 而且重, 編譯出來的東西會比較大, QT的東西都是自成體系的, 如果以前沒有用過QT, 學習起來會比較難以接受.
CEF
與其說它是一門獨立的技術, 其實它更像一個組件, 一個網頁的組件, 但是它太強大了, 以至于光用這個組件, 就可以實現所有的功能了. CEF全稱Chromium Embedded Framework, 是一款基于Chromium瀏覽器的嵌入式框架, 說白了就是一個dll, 它提供了一套接口, 使用這套接口, 你可以控制整個網頁, 以及里面幾乎所有的東西, 整個頁面交互都由你控制, 效果非常好.
我們的客戶端里面或多或少需要涉及跟網頁的交互, 不管什么理由, 在CEF之前, 幾乎采用的都是window提供的IE組件, 然后實現一堆的com接口, 但是這種方案有個很大的問題, 就是太依賴用戶的環境, 用戶環境非常惡劣, 各種ghost系統, 閹割版系統, 組件缺失, 環境變量不一致, 最后導致的問題就是程序各種奔潰,更為惡心的是, 這種奔潰是沒法通過代碼解決的, CEF的出現, 簡直就是救星, 自從我們公司軟件使用CEF之后, 奔潰的概率只有原來的1/10, 極大的提高了用戶體驗.
- 優點
使用網頁支持各種酷炫的效果, 接口精簡, 維護成本算是比較低的, 跟win32或是duilib使用, 簡直就是絕配, 而且跨平臺, 在linux, mac都有對應的版本.
- 缺點
重, 耗內存, 大家都懂chrome就是內存大戶, 軟件里面嵌入一個chrome, 內存就蹭蹭蹭的往上漲, 隨隨便便增加個幾百兆的內存是經常的事, 這是個很現實的問題, 因為這個內存問題, 我們軟件至今維護了一個非CEF的版本, 給那些不愿意升級的用戶使用. 但是個人覺得隨著科技的發展, 硬件的更新迭代, 這種問題都不會是問題, 更何況巨硬加入chromium的陣營, 很可能會解決這種內存問題.
electron(nwjs)
electron和nwjs是同一類東西, nwjs出得更早, 但是現在electron使用的更廣泛. 依稀記得15年剛接觸nwjs的時候的那種內心的激動, 感覺發現新大陸一樣, 它的確就是新大陸, 現在的vscode, atom等等, 都是基于electron的應用.
electron 和 CEF一樣,也是chromium系列的, 但是CEF是通過封裝接口, 然后由chromium回調到自己的程序, 驅動整個程序運行, electron則是在chromium的基礎之上, 再嵌入一了個js執行的v8引擎, 由此v8引擎與chromium內部的v8進行信號的交互, 驅動程序運行, 兩種是截然不同的方式. 而且electron是已經一個完全獨立的客戶端, 不需要像CEF一樣, 寄宿在其他程序內部.
- 優點
跨平臺, 非常良好的交互體驗, 完全的網頁編程, 起點低, 不需要有任何C++編程的經驗, 就可以開發一個完整的, 高體驗的客戶端, 支持C++擴展. 各種簡單高效, 簡直就是開發利器.
- 缺點
重, 內存高, 性能差, 各種黑箱操作, 如果程序掛了, 完全就是束手無策. 早期的版本非常不穩當, 很容易就crash了, 15年在調研了這種技術之后, 我們在新的項目上使用了nwjs, 奔潰問題太嚴重了, 完全束手無策, 后面我們拉下來整個nwjs的代碼, 自己編譯整個項目之后, 才略微猜到問題, 前前后后花了兩個C++程序員, 大概半個月的時間, 非常不可控, 以至于我們放棄了這種方案, 新版的程序, 采用了duilib + CEF的方案. 但現在已經過了很久了, vscode和atom已經幫我們躺過大部分坑了, 我相信現在electron是非常穩定的.
技術選型
electron向我們描繪了非常美好的前景, 大概就是前端統治一切, 前景很美好, 實際上卻不是那么優雅, electron暫時性能是比較差的, 原因很簡單, 單線程跑, 你能跑多快啊. 如果完全沒有C++功底, 無腦推薦electron, 如果有C++功底, 還是建議使用duilib + CEF. 如果想做跨平臺, QT是最好的選擇, 技術如果不錯就用QT + CEF. 如果是細心的人會發現QQ是用了CEF的, 微信是duilib + CEF, 網易云音樂前端是全CEF的, 釘釘是duilib + CEF, 我們日常用的這幾大軟件, 幾乎都是這么個架構, 好像也沒什么太多選擇.
后記
寫完這篇文章之后, 經同事指正, 認為寫的太泛, 應該把每一類拆出來, 單獨為一篇, 然后從技術路線, 實現效果, 運維成本, 以及整體企業成本等方面展開描述. 如果真這樣的話, 要寫的內容就多了, 后面就在微信公眾號里面更新這個系列吧, 歡迎關注公眾號-雀觀代碼.
以上純粹一本正經, 胡說八道, 喜歡的人歡迎關注公眾號, 如果覺得我說的不對, 想要跟我理論一番的同學, 也歡迎關注公眾號, 私信我.
總結
以上是生活随笔為你收集整理的vc++ mfc 非客户区 描绘线_决战客户端技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符串小数转化整数_pyth
- 下一篇: wpf中的点击窗口放大放小按钮怎么写_P