PWA,現代前端必會的黑科技

PWA

如果你是一名現代前端,那麼恭喜你,你需要了解並使用這麼個神器。

如果你還不知道PWA,那麼恭喜你,你看到了這篇文章。

本文只簡單介紹概念入門,具體請查閱相關資料與官網文檔。

Progressive Web Application,全稱“漸進式網頁應用”,是谷歌主導的一種新時代網頁(應用)。

簡單的理解,就是你的網頁,可以通過某種方式達到離線使用。是不是很神奇,網頁可以離線使用,那還叫什麼網頁(網頁,網頁,沒網還頁啥?)。

他牽扯到兩個關鍵文件,如下:

  • manifest.json

這個嚴格意義上來說,與離線的關係不大,更確切的講,他是手機上用到的關鍵。

讓你的網頁可以具有類似App的效果,比如logo,啟動頁面等等。

安卓的Chrome,蘋果的Safari都已經兼容,不過兼容程度有區別而已

PWA,現代前端必會的黑科技

具體Demo如下:

{

"name": "GoTop",

"short_name": "衝頂大會",

"display": "standalone",

"orientation": "landscape",

"start_url": "/",

"theme_color": "purple",

"background_color": "purple",

"icons": [

{

"src": "logo_48.png",

"sizes": "48x48",

"type": "image/png"

},

{

"src": "logo_144.png",

"sizes": "144x144",

"type": "image/png"

}

]

}

對應效果如下:

1、正常打開

PWA,現代前端必會的黑科技

就是正常的網頁,不過此時已經獲取manifest.json裡面的相關配置

2、添加主屏幕

PWA,現代前端必會的黑科技

3、桌面效果

PWA,現代前端必會的黑科技

本例子沒有縮略圖,尷尬。然後桌面上就跟普通的App一樣了。相當的輕量。

4、啟動頁

PWA,現代前端必會的黑科技

這是從桌面打開的效果,一個是歡迎頁的效果;一個是,注意,看上面已經沒有了瀏覽器地址欄。整體效果與App無異。

  • sw.js

這個js命名隨便啦,只是說其功能叫Service Workers,所以習慣寫作sw.js而已。

1、作用

讓你的Web App離線使用的關鍵js配置。

實例如下:

var cacheName = 'gotop-01' // 決定是否更新本地資源,每次要更新記得替換

var cacheList = [ // 需要保存本地資源列表,支持*匹配

"/",

"index.html",

"dist/app.js",

]

// Service Worker 註冊完成事件,寫入緩存

self.addEventListener('install', e => {

e.waitUntil(

caches.open(cacheName)

.then(cache => cache.addAll(cacheList))

.then(() => self.skipWaiting())

)

})

// Service Worker 啟動事件,處理更新緩存

self.addEventListener('activate', e => {

e.waitUntil(

Promise.all(

caches.keys().then(keys => keys.map(key => {

if(key !== cacheName) {

return caches.delete(key)

}

}))

).then(() => {

self.clients.claim()

})

)

})

// 請求接口事件,處理相關邏輯

self.addEventListener('fetch', e => {

e.respondWith(

caches.match(e.request)

.then(res => res || fetch(e.request.url))

)

})

差不多是官網的示例修改了下,基本可以跑起來,關鍵說明已經在註釋裡面,其他都是代碼即註釋,就那麼用即可。

2、調試

在Chrome調試器中的位置如下:

PWA,現代前端必會的黑科技

保存的資源如下:

PWA,現代前端必會的黑科技

3、應用效果

  • 調試器
PWA,現代前端必會的黑科技

模擬斷網的情況,刷新頁面依然可以正常使用。

  • 手機實際效果
PWA,現代前端必會的黑科技

注意看,當前是飛行模式,從手機桌面點開,依然可以類似App正常打開使用。

有什麼用

這個怎麼說呢,用處不小,並且還在快速增長中。

舉例來說:

  • 脫機遊戲
  • 有幸依賴於Canvas和WebGL的快速發展,現在純js寫出的遊戲,不單單瀏覽器可以運行,並且可以無縫打包到各個平臺運行,其性能相當不錯,有興趣可以瞭解下,如:Cocos2D-js,Layabox,白鷺引擎等。
  • 於是,你做的遊戲,假如像一些知名的單機遊戲,如flappy bird等,那麼就可以實現離線玩耍了。加速響應
  • 以前資源的緩存需要前後端協調,重頭戲在後端。現在就可以把緩存相關的東西,重點放在前端,前端每次更新自己當然知道什麼資源需要更新,什麼資源萬年不動,後端專注實現業務邏輯即可。
  • 要知道有些網頁的初次請求可是非常要命的,一是真的資源很大而服務器較差;二是得益於我大天朝的牆,唉~
  • 尤其,現如今AI熱潮,以及機器學習啦,深度學習什麼的,未來可能一個網頁依賴的原始框架大小超乎你的想象,如果每次請求都需要重新加載資源,我的天。。。應用市場
  • 沒想到吧?
  • 臭名昭著的巨硬,在去年還是今年年初來著,正式在win10的應用市場中,支持PWA應用(詳情戳我)。這意味什麼呢?
  • 這可就厲害了,你一個PWA,做好自適應,然後:
  1. PC網頁版手機網頁版微信網頁版(比如公眾號)Electron分別提供Mac,Linux,Win7版Win10就用官方支持的PWA版HBuilder或Cordova開發真實App應用版其他奇葩版。。。

到這裡,你大概瞭解PWA的相關知識沒?

Vue夠潮了沒?vue-cli已經官方支持PWA的模板了,如下:

vue init pwa yourprojectname

那麼,想作為當今的潮流前線的前端,你還能不去接觸PWA,不去學習嗎?

這裡是PWA官網,官網請翻牆食用。


源碼相關

GitHub


如果文章對你又一點點幫助,我就非常開心了~

我是風藍小棲,如果喜歡我的文章,請務必關注一波啊!!!我必會定期更新技術文章。

鏈接:http://www.imooc.com/article/44794


分享到:


相關文章: