(ps: 有一段時間沒發文了,忙得不可開交,以前團隊分享PWA,答應你們整理出來,終於兌現了~)javascript
PWA,英文全稱是 Progressive Web App,2015年 由 Google 提出。PWA是提高 Web App的體驗的一種新方法,能給用戶原生應用的體驗,兼具了 Web App 和 Native App 的優勢。java
漸進式 - 適用於選用任何瀏覽器的全部用戶,由於它是以漸進式加強做爲核心宗旨來開發的。自適應 - 適合任何機型:桌面設備、移動設備、平板電腦或任何將來設備。 git
鏈接無關性 - 可以藉助於服務工做線程在離線或低質量網絡情況下工做。github
相似應用 - 因爲是在 App Shell 模型基礎上開發,所以具備應用風格的交互和導航,給用戶以應用般的熟悉感。web
持續更新 - 在服務工做線程更新進程的做用下時刻保持最新狀態。ajax
安全 - 經過 HTTPS 提供,以防止窺探和確保內容不被篡改。shell
可發現 - W3C 清單和服務工做線程註冊做用域可以讓搜索引擎找到它們,從而將其識別爲「應用」。數據庫
可再互動 - 經過推送通知之類的功能簡化了再互動。編程
可安裝 - 用戶可免去使用應用商店的麻煩,直接將對其最有用的應用「保留」在主屏幕上。json
可連接 - 可經過網址輕鬆分享,無需複雜的安裝。
PWA 自己強調漸進式,但並不要求一次性達到安全、性能和體驗上的全部要求,開發者能夠經過 PWA Checklist 查看現有的特徵。
PWA功能豐富,相比原生應用更加輕量。咱們能夠把 PWA 網站添加到桌面上,無論在PC端仍是移動端,都相似於一個原生應用,而且擁有媲美原生應用的體驗。它也擁有原生 APP 應用通常的啓動閃屏,也能夠進行消息推送——不過要知道,它源自 Web,一般只有傳統 APP 的體積的十分之一甚至更小。它不用等待下載安裝的時間,打開網頁的時候就已經「下載」而且「安裝」完畢。
App Shell 架構是構建 PWA 的一種方式,這種應用能可靠且即時地加載到您的用戶屏幕上,與本機應用類似。
App Shell 是支持用戶界面所需的最小的 HTML、CSS 和 JavaScript,若是離線緩存,可確保在用戶重複訪問時提供即時、可靠的良好性能。這意味着並非每次用戶訪問時都要從網絡加載 App Shell。 只須要從網絡中加載必要的內容。 看下面這張圖來了解下:
構建單頁應用時,可使用APP Shell,它依賴漸進式緩存 Shell(使用服務工做線程)讓應用運行。App Shell 很是適合用於在沒有網絡的狀況下將一些初始 HTML 快速加載到屏幕上。
App Shell 應能完美地執行如下操做:
Service Worker 做爲現代瀏覽器的高級特性,依賴於 fetch 、promise 、CacheStorage、Cache API、等瀏覽器的基礎能力, Cache 提供了 Request / Response 對象對的存儲機制。CacheStorage 則提供了存儲 Cache 對象的機制。
注意:
使用ServiceWorker以前,須要先判斷瀏覽器是否支持,代碼以下:
若是支持,則註冊serviceWorker.js
,註冊後,就能夠 install 並寫入具體的邏輯代碼了,簡單看個例子:
細心的同窗應該注意到這裏的 self
和 caches
,這裏簡單提一下,SW 有一些全局變量
Web Storage 包括 Local Storage、Session Storage。它們使用簡單的鍵值對來存儲,方便靈活,可是它們的內存較小,當遇到大量的結構化數據時,就沒法應對了。瀏覽器數據存儲方式還有IndexedDB、Web SQL 和 Cookie。接下來就來看下IndexedDB,它可以在客戶端存儲大量的結構化數據。例如,在PWA應用中,咱們能夠用它來離線存儲大量的聊天記錄。
關於IndexDB的介紹,引用這篇文章中的一段話:
indexedDB 是 HTML5 提供的一種本地存儲,通常用戶保存大量用戶數據並要求數據之間有搜索須要的場景,當網絡斷開的時候,能夠作一些離線應用,它比 SQL 方便,不用去寫一些特定的語句對數據進行操做,數據格式爲 json。
IndexDB 使用索引高效檢索的API,如打開一個IndexedDB數據庫,能夠這樣寫 window.indexedDB.open(name)
。須要注意的是,IndexDB的功能之一就是它有異步的API,相似於 ajax
請求。咱們經過代碼來了解下
如代碼所示,打開數據庫後,有如下幾個回調:
onerror(err => {}) onsuccess(res => {}) onupgradeneeded(data => {})
分別處理數據庫打開失敗、成功的回調,以及請求數據庫版本變化的回調。
IndexDB 在使用時,須要注意如下幾點:
"indexedDB" in window
判斷下HTTPS,簡單來說就是 HTTP 的安全版,它是HTTP over SSL/TLS的縮寫。PWA 只能在 HTTPS 協議下使用,本地開發時支持 localhost
和 127.0.0.1
。https下調試能夠用 github page
。
HTTPS 會對傳輸的數據進行加密,創建一個信息安全通道,來保證傳輸過程當中的數據安全。同時,也會對網站服務器進行真實的身份認證。
關於HTTPS,你們都比較熟悉,這裏就很少贅述了。
關於PWA開發與調試的,題葉老師寫了一篇文章PWA 入門: 寫個很是簡單的 PWA 頁面,介紹瞭如何開啓一塊兒簡單的PWA應用,感興趣的童鞋能夠去看看。
PWA做爲下一代 Web 應用模型,在國外很是受重視,在國內一樣受到各大互聯網企業的歡迎。去年餓了麼也實現了一場PWA升級實踐。以前看過一篇文章,說PWA在印度廣受歡迎,由於當地2/3G網絡覆蓋比較多,PWA的優點就明顯了。下面借用列出了一些站點,從最開始的 Flipcart,到目前的 Instangram、Uber、Twitter、Starbucks 等,不只數量在增長,站點等級和質量也在不斷地提高。
篇幅有限,沒法面面俱到,只能拋裝引玉,歡迎批評指正~