隨著 Chrome 和 Safari 的高歌猛進,以及 IE+Flash 的衰落,HTML5 告一段落,進入了下一個時代——移動互聯網。HTML5 的跨平臺優勢在移動互聯網時代被進一步凸顯。HTML5 是唯一一個通吃 PC、Mac、iPhone、iPad、Android、Windows Phone 等主流平臺的跨平臺語言。Java 和 Flash 都曾夢想這個位置,但夢斷于 iOS。此時人們紛紛開始研究基于 HTML5 開發跨平臺手機應用。很多人當時認為,原生應用只是過渡,就像當年從 C/S 結構轉變為 B/S 結構一樣。而且學習 Objective-C 和 Java 很費勁,我既然會網頁開發,為何不試試 HTML5。
W3C 此時成立了 Device API 工作組,為 HTML5 擴展了 Camera、GPS 等手機特有的 API,然而麻煩的是,移動互聯網初期的迭代太快了,手機 OS 在不停的擴展硬件 API,陀螺儀、距離感應器、氣壓計。。。每年手機 OS 都有大版本更新。而 W3C 作為一個數百家會員單位共同決策的組織,從標準草案的提出到達成一致是非常復雜的過程,跟不上移動互聯網初期的快速迭代。
PhoneGap 的出現,給開發者打開了一扇窗。很多人期待 PhoneGap 不停擴展 API,來補充瀏覽器的不足。Adobe 看到 PhoneGap 仿佛看到了重振江湖地位的希望,但在 Adobe 收購 PhoneGap 后,又發現這個東西問題很多,而且開源使得 Adobe 無法像 Flash 那樣獲取商業利益,于是就把 PhoneGap 捐給了 Apache,改名為 Cordova。
因為各種原因,Cordova 的定位最終沒有成為瀏覽器的強化,而走向了混合式開發?;诋敃r的背景,他們認為原生是不可替代的,“原生 +HTML5”的混合模式更有意義。所以現在 Cordova 的使用往往是“原生工程師 +HTML5 工程師”一起協作完成 App。
這時 Facebook 加入了 W3C,牽頭成立了 Mobile Web 工作組。Facebook 是混 Web 圈的,并且在手機 OS 上并無自己的領地,他不喜歡被蘋果和 Google 掌控的原生應用生態系統。Mobile Web 這個工作組的重要目標就是讓 HTML5 開發的網頁應用達到原生應用的體驗。然而,事與愿違,它不努力也就算了,結果是努力了卻失敗了。2012 年,Facebook 放棄了 HTML5 的新聞充斥了全世界的 IT 媒體,HTML5 瞬間被打入冷宮。
Facebook 為何放棄 HTML5?核心是當時基于 HTML5 真的做不出好的移動 App。對比 Twritter 等競爭對手的原生 App,Facebook 的 HTML5 版本實在無法讓用戶滿意。比如 Push 功能,到現在 HTML5 的推送和原生的推送體驗差距依然巨大,更不用說 HTML5 應用的頁面切換白屏、下拉刷新 / 側滑菜單不流暢等眾多問題??粗こ處熭p松實現搖一搖、二維碼、語音輸入、分享到朋友圈等功能,更是讓 HTML5 工程師感覺自己站錯了隊。
即使 Facebook 不喜歡被控制,也不能拿被用戶拋棄來冒險。而且 Facebook 并沒有掌握關鍵點—手機瀏覽器內核。如果瀏覽器不跟上,其他都是白搭。
而瀏覽器在手機上的表現是什么呢?先看 Google,Chrome 性能雖高,但 Android 上的瀏覽器卻并非 Chrome,而是 WebKit 改出來的一個蹩腳的 Android 瀏覽器;再看蘋果,iOS 上不允許其他瀏覽器引擎上架 App Store,而且其他使用 Safari 引擎的應用也無法調用蘋果自己的 JavaScript 加速引擎 Nitro。結果是蘋果和 Google 不但不在瀏覽器上積極實現 HTML5 關于移動 App 所需的規范,反而對 HTML5 做出種種限制。
不管是當時硬件能力不足,還是手機 OS 廠商的故意限制,總之結果很明顯:在移動互聯網的初期,一定是原生應用生態系統的天下,iOS 和 Android 首先把自己變成老大后,其他小弟才能尋覓到成長的機會。
Facebook 也好,PhoneGap 也好,想在移動互聯網初期就分一杯羹是分不到的,但堅持下來,機會往往會出現。