http://chinese.engadget.com/2012/09/12/zuckerberg-html-5-facebook-mobile-app-mistake/
從至愛的科技網站看到一篇報導,表示 Facebook 靈魂人物朱克伯格(Zuckerberg)認為用 html5 開發 facebook 流動應用程式是一個錯誤。並且開始用原生碼來開發 Android 應用程式,而 iOS 原生碼的流動程式經已在早前推出。
在流動開發過程中,使用 HTML5 有一個很大的誘因 – 跨平台。無論使用 iOS 或 Android 甚至是 Windows Phone 和 Symbian。只需要一套編碼,基本上滿足你所有要求。如 Canvas API 可以助你用 Javascript 編碼完成 2D/3D 的實時繪圖,localStorage 可以快速暫存資料,亦可以用接口讓 Native / HTML5 編碼溝通,免卻在 Android 用 SharedPreference,卻在 iOS 用 NSUserDefault 的「用一套,記一套」的苦惱。但其實用 HTML5 開發應用亦有很多令人頭大的問題。
1. HTML5 支援問題 – 正當你落實跨平台開發專案,利用便利的 HTML5 編碼來作出開發。但當你發現在 iOS 的 UIWebView 運行表現出眾;用 Ice cream sandwich 的 WebView 開發亦無大問題。但你的客戶希望將軟體支援至 Android 2.3. 你就發現問題就來了,你會發現有一些重要的 HTML5 不可以使用 – 如 toDataURL(),或者 HTML5 的視頻播放。而因為 HTML5 是 WebView 內的功能,你又不一定可以混合源生編碼解決問題. 例如,我如何將 Canvas 的圖示,在沒有 toDataURL() 支援用原生碼來輸出圖片 base64 的編碼?
2. 報行速度 – 不同的流動平台的 WebView 運行速度不同,如 iOS 的 Canvas Drawing 很流暢,但 Android 的表現就有點差強人意。這樣會大大影響用戶體驗。
3. WebView 的不明內部錯誤。iOS 或 Android 的 WebView 不是萬能聖藥,都是由工程師開發。工程師是人,有人即是會有錯誤。利用 WebView 開發 App,若果 WebView 有甚麼不明錯誤,就可能無可救藥。好像用 JS 執行一個會消耗 10 分鐘的 Thread, 若用戶等久了想中途取消運作。在 Android 的平台下是不可能停止的,而 10 分鐘過後你的 app 因為你的 javascript 執行完成而莫名奇妙展示你已取消的結果。而利用源生碼,若你發現有任何部件出事,你可以有較大自由度去解決問題,亦可以控制程序報行的 lifecycle. 這是 html5 不可比擬的。
利用原生碼開發有兩個好處 – 高效和穩定。原生 API 必定得到大部份硬體支援,充份的參考文件了解 API 的支援狀況,運行上亦是最為穩定。若有甚麼問題,廠商亦能即時支援。在這個追求使用者經驗的時代來說,流暢可用的 App 比一個能讓所有群眾基本使用的 App 更為重要,才能為品牌/服務留住使用者群。