WPA基礎

概念

WPA 的英文全稱是Progress Wab Apps,翻譯爲漸進式應用。
來自 appsco.pe 的解釋
WAP是傳統應用的未來發展方向。webbrowser技術的進步使得創建基於web的應用程序成爲可能,這些應用程序模仿並提供與本機(傳統)應用程序相同的功能,這意味着應用程序可以像網頁一樣被創建。
WPA通過web瀏覽器提供像原生應用一般的強大功能,同時在使用的時候可以不受網絡環的影響。它將遠程應用的功能引入到了Web。
PWA指向一個清單文件manifest,其中包含網站信息,包含圖標、背景屏幕、顏色和默認方向等內容,使用了瀏覽的 Service Worker 功能,通過 Service Worker,可以使得選擇性的緩存部分網站資源,以提供離線訪問的體驗。

特點

響應式,獨立於網絡連接,類似於原生應用的交互和體驗,始終保持更新,安全,可發現,可重連,可安裝,可鏈接

與傳統apps對比

  • 跨平臺
    wpa程序運行於瀏覽器,與平臺無關,所以無論桌面、IOS、或安卓都可以兼容
  • 開發簡單
    創建wpa應用與創建web網站幾乎是一樣的,同樣是基於html5和jsvascript。
  • 不依賴應用商店
    像web頁面一樣,pwa程序運行於web瀏覽器上,這意味着它們不需要通過應用商店即可訪問和升級,同時也意味着節省了30%的抽成(App Store)
  • 搜索引擎友好
    不同於原生應用,pwa程序可以被搜索引擎搜索到,更容易被用戶來發現和傳播。

什麼是 Service Worker

WPA功能的關鍵在於Service Worker。

Service worker是一個註冊在指定源和路徑下的事件驅動worker。它採用JavaScript控制關聯的頁面或者網站,攔截並修改訪問和資源請求,細粒度地緩存資源。你可以完全控制應用在特定情形(最常見的情形是網絡不可用)下的表現。

簡單來講,Service Worker 只是在後臺運行的worker腳本,用JavaScript編寫,只需要簡單幾行代碼,就可以實現攔截網絡請求、處理推送消息並執行其他的任務。對於某些不支持Service Worker的瀏覽器,WPA會自動降級成普通的網站,一樣可以爲用戶提供服務。

Service worker運行在worker上下文,因此它不能訪問DOM。相對於驅動應用的主JavaScript線程,它運行在其他線程中,所以不會造成阻塞。它設計爲完全異步,同步API(如XHR和localStorage)不能在service worker中使用。

出於安全考量,Service workers只能由HTTPS承載,畢竟修改網絡請求的能力暴露給中間人攻擊會非常危險。在瀏覽器的隱私模式,Service Worker不可用。

下圖說明 Service Worker 是如何工作的。

Service Worker 工作方式

Service Worker 的生命週期

Service Worker 的生命週期

從上圖看,當用戶首次訪問網頁時候,服務器返回響應網頁,
在第一步中,當調用register()函數時候,Servies Worker 開始下載。在註冊過程中,瀏覽器下載、解析並執行 Service Worker(第2部),如果在此步驟出現了任務錯誤,該 Service Worker將被廢棄。

在Sercice Worker被成功執行之後,安裝時間將被激活(第3步)。
完成安裝之後,Sercice Worker即開始被激活生效,開始控制在其控制範圍中的所有事件。

Demo實例

if("serviceWorker" in navigator) {
 navigator.serviceWorker.register('./sw.js').then(function(registration){
  console.log('ServiceWorker registration successful with scope: ', registration.scope);
 }).catch(function(err){
  console.log('ServiceWorker registration failed: ', err);
 });
}
// sw.js
self.addEventListener('install',function(event){
 console.log('install event from sw.js.')
});

// 結果:
運行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章