一個 iOS 開發(fā)者眼中的 WPF 技術(shù)
知乎上18年的一個帖子,看看iOS開發(fā)者怎么評價WPF的,整體還比較中肯,部分觀點過于悲觀,但不礙于是個好帖子。
事情還要從一年前說起,本來小生我也算是半個果粉,iOS 研發(fā)一直做的風生水起,對于知乎上所謂果粉和軟粉的撕逼,完全是一種“事不關(guān)己高高掛起”的心態(tài)。然而好景不長,剛進入公司兩個月不到,就因為業(yè)務(wù)調(diào)整,被調(diào)去做 PC 開發(fā),開始學習和使用 WPF 技術(shù)。到現(xiàn)在,我也勉強算是 iOS 和 WPF 雙修的人才了?,F(xiàn)在看到知乎上果粉和軟粉的時候,莫名地有一種“早已看透一切”的包容和親切。
知乎的微軟話題和 WPF 有關(guān)話題,充斥了輪子哥以及類似輪子哥風格的,帶著微軟浪漫主義色彩的答案,不管中間說了些什么,結(jié)尾必定要有一個“(逃”。本來我對輪子哥這種技術(shù)前輩,是懷著尊重的態(tài)度的。直到我昨天刷到了這么一個問題:
學完了c/c++的語法和簡單算法(圖論 搜索 dp 快排啥的),應(yīng)該深入學習算法,還是學習其他語言?帖子鏈接:https://www.zhihu.com/question/266079812
輪子哥前排建議一個大一學習算法有點吃力的計算機專業(yè)學生,去學習 C++ 大規(guī)模軟件開發(fā)。從這個答案,我算是終于看出來,輪子哥答題就是在 xjb 答。我覺得我需要做點什么。我想用自己微弱的力量,給知乎上的微軟話題,帶來一點清流。于是就有了這篇文章。
本文假設(shè)讀者對于“WPF 是什么”有一個基本的認識和理解,因此不再贅述有關(guān) WPF 的基本概念。
WPF 的優(yōu)勢
先說結(jié)論,WPF 毫無疑問是現(xiàn)在開發(fā)傳統(tǒng) Windows 應(yīng)用最先進的框架,目前看沒有之一。WPF 誕生的目的就是為了取代傳統(tǒng) Win32,MFC,以及 WinForm 等開發(fā)技術(shù)。WPF 的優(yōu)勢具體體現(xiàn)在下面幾點:
前沿的設(shè)計和強大的框架。作為一個比 iOS 和安卓早出生好多年的 UI 框架,其主體設(shè)計是適應(yīng) MVVM 的?,F(xiàn)在 iOS 和安卓看起來“先進”的 MVVM 設(shè)計,其實早就被 WPF 廣泛使用了?;?XAML 的界面解耦,內(nèi)置的數(shù)據(jù)綁定引擎等等設(shè)計,讓 WPF 成為了非常強大的 MVVM 框架。借助于框架的先進性,在傳統(tǒng) Windows 開發(fā)領(lǐng)域,其效率是秒殺其他技術(shù)的。 完善的工具支持。這一點對于 MS 家的大部分平臺都是適用的,裝了 VS 之后基本不需要其他工具。VS 本身就可以同時作為 XAML 設(shè)計器和代碼編輯器。配合 C# 作為開發(fā)語言,寫代碼的體驗是很順暢的。從 VS 2017 開始,甚至支持了運行中 XAML 的即時修改,所見即所得,達到了接近前端開發(fā)的體驗。進一步提升了開發(fā)效率。 較為理想的性能。作為跑在 .NET 上的技術(shù),WPF 實際的性能表現(xiàn)可以說是讓人滿意的。WPF 本身是使用 DirectX 渲染的,因此其圖形性能有一定的保證。在現(xiàn)在電腦配置普遍較高的時代,實際使用中,Win32/MFC 相對于 WPF 的性能優(yōu)勢并不明顯。
WPF 的劣勢
說完優(yōu)勢該說劣勢了,WPF 技術(shù)的劣勢也是十分突出的,具體有下面幾點:
較高的學習成本。相對于 iOS 和安卓,WPF 由于設(shè)計思想和框架的復(fù)雜性,其入門門檻相對要高很多。而且相對于現(xiàn)在勢頭正盛的 iOS 和安卓,WPF 的資料在網(wǎng)上要少太多了。對于新手而言,入門是個比較大的問題。 社區(qū)的缺失。這也是微軟桌面技術(shù)一直以來的問題。和 iOS,安卓,以及 Web 相比,WPF 幾乎沒有社區(qū)可言,開源項目寥寥可數(shù) 。優(yōu)秀的 WPF 控件庫和工具庫,都是商品產(chǎn)品,需要花錢買。對于習慣了 iOS 的開源氛圍的我來說,覺得很痛苦。 框架的限制難以適應(yīng)大量交互需求的現(xiàn)代軟件開發(fā)。WPF 本身框架的強大是毋庸置疑的,然而同時也給 WPF 帶來了非常大的限制。WPF 本身誕生的時代,是傳統(tǒng) Win32 的時代,所有的應(yīng)用都是按鈕菜單那種老式的交互設(shè)計。而現(xiàn)在的交互設(shè)計卻追求自定義 UI 和控件之間的各種聯(lián)動。在這樣的需求面前,WPF 明顯是力不從心的,有些東西的實現(xiàn)要繞過框架的限制,代碼就會變得丑陋同時難以維護。只能說 WPF 確實是年代太久,不適應(yīng)我們這個時代了。 內(nèi)存占用和性能要求較高。由于本身跑在 .NET 上,內(nèi)存可控性就相對差一些。同時 WPF 框架本身就要占用大量的內(nèi)存,在這個層面上,幾乎沒有優(yōu)化空間。舉個例子,一個全新的只有空白窗口,什么都沒有的 WPF 工程,在 Debug 模式下運行,就要占用 90M 左右的內(nèi)存。在配置較低的機器上,程序很容易因為內(nèi)存占用太高而崩潰。
總結(jié)
總體來看,WPF 技術(shù)有其先進的一面,也有其缺點。然而 PC 桌面開發(fā)的頹勢已經(jīng)形成,不可逆轉(zhuǎn)了。WPF 或許是生不逢時,從出生到現(xiàn)在,還沒有來得及經(jīng)歷巔峰,時代就把它拉倒了谷底。
