HTML5、Web引擎與跨平臺移動App開發
移動端跨平臺應用開發是個有趣的話題。縱觀該領域目前各個開發商提供的多種方案,大致可以分為三大類:
-
基于HTML5的方案。該方案以PhoneGap/Cordova為代表。其基本思路是針對HTML5標準目前功能上的不足,補充定義了一套比較實用的API(比如硬件訪問/系統交互等),然后基于平臺上自帶的Web引擎(比如iOS的UIWebview等),通過擴展機制實現了這些API,在此基礎上再提供一套應用打包部署系統。Intel的XDK也屬于此類方案。
-
將Native API映射封裝成統一語言的API的方案。該方案以Titanium、Xamarin為代表,其中Titanium提供JavaScript API,Xamarin提供C# API。這樣的好處是可以較容易達到和Native API類似的能力,編程模型/方式也和原生應用相似。
<div class="related_sponsors visible stacked"> <div class="gray_section_related only1 fullWidth"> <div class="related_editorial sponsored only1"><br />
</div> </div>
</div> </li>
-
有行業針對性的HTML5 API方案。比如Ludei的CocoonJS就 是一個比較有意思的方案,它設計了一套專門針對2D/3D游戲開發的API(支持iOS和Android)。可以認為它是HTML5圖形操作的子集 (Canvas +WebGL),再加上一些擴展的API比如硬件訪問能力/廣告/應用內購買/社交網絡整合等,以實現一個完整的游戲引擎。
</ol>
- 瀏覽器,比如Safari/Chrome/UC Browser等;
- 系統自帶的Webview組件,比如上面提到的iOS UIWebview和Android Webview
- 專門的Web Engine,比如Intel的開源項目Crosswalk、Ludei的Webview+
本文重點介紹基于HTML5的方案相比其他方案的優缺點,如何實現更好的效果,以及目前的一些進展。
HTML5方案的特點
原生API映射的方案,如Titanium、Xamarin,其優點在于功能和性能與原生系統比較接近。但是,由于不同系統原生API設計上還是會 有不少差異,API的映射還是需要不少的權衡取舍。同時,由于這些API是這些廠商自定義的,談不上什么標準,相應的開發資源(程序庫/技術支持/社區等 等)也相對有限。
<p>而另一方面,標準化、開發資源的豐富則是HTML5方案最大的優點,同時第三方的HTML5框架工具比如PhoneGap/Cordova也極大促
進了HTML5應用的發展,它們提供了方便的跨平臺應用打包/發布服務、實用的API、靈活的擴展機制、以及積累下來的豐富的第三方API實現。而上游的 W3C一旦開始支持一些新的API,PhoneGap/Cordova也可以很快沿用這些標準的API將相關能力開放出去。</p>
HTML5方案的主要不足則在于功能和性能方面,這主要是因為HTML5應用的能力嚴重依賴于系統自帶的Web引擎:iOS的UIWebview、 Android的Webview等,此類組件的HTML5能力相比Safari for iOS、Chrome for Android都要差一截。另外在Android平臺上,由于系統碎片化比較嚴重,不同Android版本的Webview的HTML5能力也有較大差 異,導致相應的HTML5應用一致性難以保證。
好消息是,現在已經出現一些第三方的Web引擎以提供比系統默認的Webview更好的功能和性能,而PhoneGap/Cordova也正在改進 架構以便引入這些更好的第三方Web引擎。另外對于Tizen、Firefox OS這樣本身就是HTML5 Runtime加上擴展API的系統而言,HTML5應用是一等公民,在功能拓展方面相比iOS、Android上會增強不少。
而第三種方案,CocoonJS的優點是專注于2D/3D游戲開發,畫圖性能很好,比如同時畫1000個精靈也能達到60FPS,這是絕大多數的瀏 覽器/通用的HTML5引擎目前還做不到的。這個方案的缺點在于,由于它的畫圖操作簡化了很多路經,它無法做到和HTML5 DOM元素的互操作,而且它的HTML5能力也只是一個子集,功能比較受限。目前CocoonJS針對Android也引入了另外一種模式 Webview+作為補充,Webview+基于Chromium的內核加上Cordova API的支持以實現更通用的HTML5能力。
總的來說,HTML5應用的能力很大程度上依賴于Web引擎的能力。因此,無論是移動操作系統開發商還是開發工具的開發商,都持續在Web引擎的方向投入了更多的努力。
Web引擎
Web引擎目前大致可分為三種方式:
瀏覽器方式很容易理解,一個HTML5應用就是一個Web頁面,用戶通過瀏覽器打開一個URL,然后進入瀏覽器的全屏模式/App模式進行操作,或 者是通過點擊一個事先創建好的快捷方式打開應用。這種方式的性能取決于瀏覽器本身對HTML5的支持情況,一般來說要優于Webview組件的方式,但是 問題在于不同的瀏覽器有差異,而且通過瀏覽器運行HTML5較難做到類似原生應用的體驗(應用切換/權限管理/系統資源訪問/整合等)以及豐富的API支 持。
Webview組件方式的一般用法是以Hybrid的方式發布HTML5應用,即上述提到的PhoneGap/Cordova方案所采用的方式。其問題已經在上面提到過,主要是Webview組件本身對HTML5的支持能力不足。
專門的Web引擎可以有較好的HTML5功能和性能支持,同時有較好一致性,類似原生應用的系統整合也可以做得較好。這種方式的缺點則在于開發者需 要將Web引擎與應用程序一起打包,生成的應用大小會更大,因此有的Web引擎(如Crosswalk)也提供了一種“共享模式”,讓多個應用可以共享一 個Web引擎,僅當應用第一次啟動并且發現系統還沒有相應Web引擎時才提示用戶下載安裝。
目前的發展趨勢是:通過PhoneGap/Cordova方式得到豐富的API支持,通過專門開發的Web引擎去提升HTML5的能力。
Crosswalk和Ludei的Webview+在概念上比較類似。Webview+是閉源的,目前還不好評估;Crosswalk由我所在的團 隊開發,是開源的(BSD許可協議),基于Chromium內核,著重于對HTML5功能和性能的支持,發布周期為六周一次,支持Cordova API。
目前Crosswalk正式支持的移動操作系統包括Android和Tizen,在Android 4.0及以上的系統中使用Crosswalk的Web應用程序體驗和原生應用沒有區別。該引擎現在已經成為眾多知名HTML5平臺和應用的推薦引擎,包括Google Mobile Chrome App、Intel XDK、Famo.us和Construct2等 等,未來的Cordova 4.0也計劃集成該Web引擎。不過比較遺憾的是,由于iOS的限制(iOS不允許應用使用使用除iOS UIWebView之外第三方的JIT--即時編譯引擎),目前Crosswalk也沒有辦法提供直接的支持,但這也許會隨著HTML5更廣泛的進入移動 市場而發生改變。
總結
現在的HTML5 App(加上API擴展)已經可以勝任很多事了,比如教育類應用,休閑游戲等等。不過對于那些實時性要求比較高的、計算量大的(比如涉及大量的元素繪制, 或并行計算等)、復雜的3D游戲,多人在線游戲/應用等還有不少差距。另外,工具方面,如何能夠更高效的調試/開發/性能內存調優 HTML5應用也是另外一個需要提高的地方。不過,這些方面也在不斷的演進。相信不久的將來,HTML5終會成為主流移動開發平臺。
作者介紹
余枝強目前是英特爾開源技術中心的軟件技術經理。 主要負責HTML5 引擎 – Crosswalk
在安卓平臺的開發,以及一些其他和Web有關的新興技術的研發工作(如HTML5 并行技術, 3D Camera等)。他堅信Web是未來,
也非常希望和大家一起努力,讓這個未來能夠更快更好的到來。
來自:http://www.infoq.com/cn/articles/html5-crosswalk