近日,微軟Edge團隊發表了一篇博文,介紹Web應用在微軟的發展過程。本文將擇要介紹Web應用如何從一個“大型的文檔空間(a large universe of documents)”演化成了如今的通用應用程序平臺。
在Windows上,最早的Web應用形態可能是IE9引入的“釘選網站(Pinned Sites)”。所謂的釘選網站是指站點可以固定到Windows 7任務欄,并且可以使用自定義的圖標。后來,該特性提供了一個類似清單文件的東西,告訴平臺該站點可以“像一個應用”那樣運行,并提供了如何集成到主屏幕/開始菜單的詳細信息。而且,當W3C推出了相應的清單文件標準時,他們欣然采用了新的標準。
Web應用的真正出現是在Windows 8上。有段時間,Windows 8去掉了開始菜單,其初衷是為了讓Web成為Windows上的一等公民,讓Web真正可以在瀏覽器之外運行,而且不需要原生代碼。從技術上講,瀏覽器進程甚至都沒有參與Web應用在Windows上的運行,減少了內存/CPU的工作負載,每個Web應用都有自己的緩存。Web應用完全整合進了Windows的應用模型,讓用戶可以管理通知,離線或在后臺運行應用,甚至像原生應用那樣卸載它們。開發人員可以更深入地集成平臺,使用一些Web平臺原本不具備的原生功能。微軟創建了類似chrome.* namespace的Windows Runtime JS APIs。自此,WinRT孕育了Pointer Events、Web Notifications、Push API、Web Payments等API,使Web應用可以更快地用上原生功能。
為了將Web應用打包,創建離線優先的用戶體驗,讓其直接與原生應用進行競爭,Windows 10提供了“托管Web應用(HWA)”。它提供了一個簡單的清單文件,指向Web應用的URL。HWA應用可以像打包的應用那樣獨立于瀏覽器運行,但實時從服務器加載,讓用戶可以免于冗長的應用商店提交過程。
Progressive Web App(PWA)是HWA的一個自然擴展。本質上,PWA是HWA加上如下已經在開發的標準:
Fetch(以預覽構建版形式提供) Service Worker(開發中) Cache API(開發中) Push API(開發中)在許多方面,現有的PWA實現(Android上的Chrome/Opera/Samsung)仍然把Web應用作為二等公民。它們有主屏幕快捷方式,但不會出現在應用列表中,也不會報告存儲/數據/電池的使用情況,無法配置、管理、卸載等。微軟的目標更進一步,他們希望解決這些問題,提供全功能的應用。
目前,正在進行的工作有以下兩項:
實現上述標準; 在Windows應用商店中構建對W3C Web應用清單的支持。第一項工作讓PWA可以通過Chrome/Opera運行在Android平臺上,或者通過EdgeHTML運行在Windows平臺上。第二項工作讓PWA可以出現在應用商店的列表中,并在瀏覽器頁簽之外運行。如何在應用商店中列出PWA,用戶如何在Windows上安裝PWA,這是微軟正在努力解決的兩個實際問題。感興趣的讀者可以關注Edge開發的官方Twitter。