Windows8風格程序支持使用WPF和HTML兩種方式進行編程。本人之前曾使用WPF開發過
概念版QQ,現在又在使用HTML5。兩種技術都略懂,略懂。所以將兩者做了個比較。雖然WPF的命運多舛,應用不太廣泛,但技術本身還是有很多亮點的。值得我們學習一下,開闊眼界。
嚴格說WPF與Silverlight都屬於.Net技術體系下新一代的界面技術,都使用標記語言XAML搭建界面,程序語可以選擇C#等.Net體系的語言。
本文為了方面將WPF與Silverlight統一稱作WPF,用XAML專門表示標記語言。用HTML5表示技術、HTML表示語言。
1. XAML與HTML
都是標記語言,客戶端在運行時進行渲染。
XAML的程序雖然需要編譯,但是XAML的處理是從文本格式轉換為二進制格式,節省空間。
HTML一般在服務器端進行壓縮,如GZIP,在瀏覽器解壓縮。目的也是節省空間。
2. 頁面布局
XAML提供的布局類型較多,有Table布局,有橫向或縱向的堆棧式,wrap的流式布局,絕對位,還有windows特有的dock和anchor。
HTML5中,大量用Div,布局方式有絕對的,float的,inline,chrome等瀏覽器對DIV的display方式進行了擴展,可以實現橫向或縱向的順序排列。Table方式就不用說了。HTML5中的多列方式是獨有的。
兩者都可以在運行時動態修改界面元素。WPF還有原生的控件模版和數據綁定模版Template,但是HTML5的innerHTML更靈活更方便。
3. 渲染邏輯
兩者類似,都有邏輯樹、視覺樹(顯示樹)的概念。同樣也有reflow和redraw的概念。同樣reflow也是最耗資源的。
4. 圖形繪制
位圖方面兩者都支持很多圖片格式。不過瀏覽器可以天然支持GIF,WPF不行,但可以自行實現。微軟好像一直和GIF有仇。
矢量圖方面,WPF支持的形狀種類更豐富。不過HTML5可以利用DIV的boader、圓角的設置實現很多基本圖形。兩者都支持Path。都支持Canvas.
漸變色,兩者都支持,不過WPF一開始就很完善看,HTML5在逐漸完善,畢竟瀏覽器不是一家的。
5. 樣式
HTML5的style,CCS3什么的到家都很熟悉了。不多說了。
WPF中也有style,style可以有內建、外鏈和元素內的,外鏈的方式引用一個資源文件和CSS類似。不過CSS的選擇器做得比較好,可以通過id、class、元素類型、偽類、還有各種組合方式。畢竟HTML用的人更多,CSS有機會發展的更完善。
WPF中對於資源可以實現完全的編程控制,HTML5中可以用變成控制內聯的CSS,外聯的就不行了。
6. 事件
元素的事件都支持事件前的捕獲與事件后的冒泡。
都可以自定義事件。兩者沒有太大差別。
WPF有一個特有的機制叫觸發器trigger。trigger與CSS3的hover偽類有些類似,但功能要多得多。trigger的實現是基於事件模式的,只不過是將常用的場景進行了包裝,從而達到了不用寫C#代碼就可以處理簡單事件邏輯的功能。
7. 數據綁定
WPF所獨有的。與觸發器配合,可以打打減少編碼量,很多功能不需要用C#,只需要XAML就可以實現。
8. 3D支持
WPF可以支持3D。HTML5標准中支持,但是目前支持的還不完善處於實驗狀態。WPF中操作3D的編程界面比較友好,有高級API。WebGL提供的是底層API,難度較高,不過也有很多JS類庫進行了封裝。
9. Transform
WPF只支持2D的translate,rotate,skew,scale。HTML5可以支持3D的rotate和translate。但正如第八點提到的,WPF有專門的3DAPI,操作也不復雜。
10. 編程語言
WPF支持C#、C++、VB等多種.Net語言。HTML5支持JavaScript。個人感覺.Net的功能更強大,畢竟是客戶端,幾乎無所不能。但是腳本語言更靈活,可以在運行動態添加修改代碼。
11. 數據
WPF中可以將數據作作為資源以文本形式放在XAML內。
最新的Chromium也支持DataList了。
http://blog.chromium.org/2012/11/a-web-developers-guide-to-latest-chrome.html
12. 多媒體
視頻、聲音理論上兩者都支持。WPF支持更好,畢竟是客戶端可以支持自己編寫視頻解碼。HTML5這方面比較慢。視頻方面由於H264的專利問題幾大瀏覽器互相博弈。聲音方面更是緩慢,沒有一種音頻格式能夠通吃所有瀏覽器,在聲音播放時還有諸多問題。不過前景是光明的,只是時間問題。
13. WPF中的特色
依賴對象(DependcyObject )一套非常強大、霸氣的面向對象模型。初期接觸會覺得很暈,用熟了非常方便、非常爽。
14. HTML5的特色
MathML算是一個特色。
15. 其他
地理信息呀、WebWorker呀、WebSockets呀什么的可比較性不強。這里就不說。
--------轉自
alloyteam