WebApp與Native App再戰一輪?
歷史的車輪
Web app向Native app發起挑戰已經有好些年了。以各大公司志向宏大的操作系統為例就有:名噪一時現在棲身于LG TV的WebOS,Google 力推在教育領域還算混的不錯的ChromeOS, Samsung和Intel主導但是一直雷聲大雨點小的Tizen, Mozilla面向低端設備的FirefoxOS。還有各種開發、打包web/hybrid應用的產品:Cordova, Crosswalk,nw.js,Electron。它們也許在各自領域有所成功,但整體的現狀和處境很難說Web app對Native app的世界造成了足夠威脅。
但Web app也在不斷反思和演進,近來一系列技術革新與發展讓web app成為操作系統頭等公民的目標變得不同以往的清晰。讓我們看看“揚長避短”之后的Web app是不是真的可以開始跟Native app掰掰手腕了。
“揚長”
Web app之長首先源自web。Web不是于某家藩籬之內的封閉花園,它是一個任意提供了標準支持的終端都可以平等訪問的野蠻生長的開放大草原。Web協議棧讓全世界的網頁成為即時更新并通過URL相互聯系的網絡?;仡橶3C Packaged App(Widget)標準和SysApps(System Application Working Group)的衰落很大程度上也在于放棄了web的這些核心競爭力。
Web app之長也源自HTML,CSS,JavaScript。它們雖然招到很多詬病,但它們也是最廣泛使用的開發工具。而新的ES6,Web Components標準也在讓它們變得具有更強的開發、表達能力。當然HTML的語義話表達也是搜索的基石之一,這讓web app易于被索引和發現。
“避短”
Web app之短首先在于能力的缺失。雖然有Cordova之類工具架起和native API之間橋梁,但打包之后web app的“長”呢?所以web標準化組織一方面在努力提供各種硬件訪問的接口。另一方面提出了Service Worker來解決web app本身存在的無法通過簡單增加API來處理的關鍵問題:
其一,web app缺少在后臺運行的能力,Web Worker可以在后臺運行,但是它依賴于頁面,不能在頁面不存在的時候運行;
其二,通過URL訪問的web 頁面是彼此孤立的,雖然可以通過Web Messaging來相互通信,但是這是一種弱聯系,并需要消息傳遞之間的頁面有關聯。
Service Worker通過一個新的web app編程模型和一套API統一解決了這兩個問題。簡單的說service worker就是一個生命周期短暫的、事件驅動的后臺線程,它處理來自系統和被其控制的頁面的事件。目前可以通過Service Worker實現的功能包括:替代坑坑洼洼的Application Cache的可編程離線緩存,Push Notification(消息推送),Background Sync(后臺同步)。Service Worker能成為諸多需要跨越頁面處理能力的入口。比如如果你懷念Web Intents的話,Service Worker也許也能成為它復活的平臺:通過Service Worker注冊某個intent事件,在事件到來時worker被啟動,針對不同的intent worker可以選擇打開不同的頁面或重新聚焦某個已經打開的頁面。
輔助以W3C Manifest標準,web app有了理論上足以超脫瀏覽器成為系統一部分的能力。
Web app之短也在性能。當然性能的問題不在于比較和native app跑分一較高下,而在于用戶體驗。在JavaScript方面各個瀏覽器廠商一直在挖掘更高的性能,而近日多個巨頭同時參與的Web Assembly的提出更讓業界更是充滿期望。請想象一下,瀏覽器直接執行的游戲引擎代碼是優化過的二進制中間表達形式(IR),甚至是可能是緩存下來的后端轉換過的機器碼。另外在渲染引擎方面,60FPS的性能也一直是近一年來Blink的主要目標,相信Edge、WebKit等也不會被拉在后面。
漸進式web app
“揚長避短”之后的web app應該以一種怎樣的形式進入系統并成為系統一員呢?Alex Russell最近就提出了一種漸進式web app的理念,而且這一理念已經可以在Android上看到萌芽。
在Android Chrome上通過搜索或者鏈接發現了并使用了某個頁面。當這個頁面或者某個域范圍內的頁面在一定時間內被多次訪問后,瀏覽器會認為這些網頁是可以被升級成app的,并彈出對話框讓用戶選擇是否安裝這個web app到系統。這個web app可以享有和native app類似的權利,比如主界面啟動,獨立的應用選擇欄。目前在Chrome上指定了只有使用了Service Worker 和 Manifest 的網頁能夠升級成web app被安裝,用來保證app的質量。
這種漸進式web app的理念在我看來可以用人和人的交往來類比,一個人從陌生,到熟悉,再到相信。展開想象,是不是web app的權限管理也可以漸進呢? 安全、隱私級別高的API訪問控制會隨著你對這個app的相信程度來適配。
總結
各種web操作系統和hybrid打包工具已經向native app主導的世界發起了挑戰,隨著web技術的進一步成熟,open web也逐漸能通過漸進的方式像native app一樣成為系統的一部分。我期望著某一天自由、平等、開放的web能成為開發者的***平臺。