乙個 PWA 的誕生

2021-09-13 11:08:40 字數 2703 閱讀 2545

本文可以提前讓大家熟悉 pwa 搭建,文中提到的配置來自乙個 redesign 的 nipponcolors,最近才做好的,使用的各種庫都是現在(2018.09.14)最新的,可用的,另外本文不討論應用功能,單純講講 pwa 的搭建。

vue-cli3 與 2 的區別挺大的,3 預設搭建工程並非像 2 一樣拉取模板,而是自己選擇需要的 feature 生成專案。

要生成 pwa 專案請勾上pwa support

issue 位址

假設大家都知道 hmr(熱模組更新)是什麼了,vue-cli3 的某些版本可能會有這麼乙個問題,hmr 無法使用,控制台就一直顯示 waiting 連線,檔案一改直接顯示連線斷開。解決方案有二:

vue.config.js作以下配置

chainwebpack: config => ,
在這裡首先推薦一下尾逗號,加上尾逗號的好處只有乙個,但真的十分重要,那就是 diff 會非常好看。然後 eslint-plugin-vue 外掛程式是一些預設規則組合,分 base,essential,strongly-recommended,recommended 四級,請自由選擇,沒有最好的搭配,只要用得舒服就好,團隊合作還是非常推薦定好 eslint 規則,使用盡量詳細的同一套規則,在**合併時感覺會非常爽快。

設定 eslint 後建議配置開發伺服器的 overlay 選項,在 eslint 報錯時會覆蓋在頁面上,時刻提醒你寫**得有信條。

devserver: ,

},

vue-cli3 搭建的工程沒有自帶優化外掛程式,所以請自行安裝。有更好的壓縮外掛程式求推薦啦,這裡使用的是imagemin-webpack-plugin,基本配置如下:

var imageminplugin = require('imagemin-webpack-plugin').default

// or if using es2015:

// import imageminplugin from 'imagemin-webpack-plugin'

module.exports =

})]}

font-spider-plus

之前一直知道 font-spider,它的功能是獲取使用到的字型,然後分析出使用了改字型的字元,最後把字元抽離出來。這大大減少了中文字型的體積,但是缺不能用於 js 渲染的網頁,後來才找到 font-spider-plus,雖然要手動操作一下(最簡單的方法:發布網頁之後用 fsp 把用到的字爬出來),但是得到的優化真的很大哦!

pwa 給了我們乙個很簡單的跨平台方法,不只有移動端可以新增到首屏,pc 端也同樣可以,所以響應式設計對 pwa 可以說是必須的。

pc 端的新增方法在 f12 裡,至於更加方便的方法...好像是要改 flag 才能用,那麼也談不上多方便了,所以不介紹了,等到此項技術更加成熟,想必這個按鈕就會出現在顯眼的位置 ?

建議使用 lighthouse 給你的 pwa 評分,報告中還會帶有修改建議,十分實用。

針對 pwa 功能來說,專案成功生成就已經配置好離線快取功能,對 service worker 不熟悉的同學來說可以說很方便了。但是對於推送功能和 service worker 的更多細節仍然需要深入研究才能流暢使用這個新興玩意。

(以下稱 service worker 為 sw)

有乙個問題特別值得注意,那就是 sw 的更新問題。sw 控制專案環境的快取,但是 sw 更新後怎麼重新整理快取就不那麼容易理解了。sw 更新後,會進入 waiting 狀態,舊的 sw 依舊正常執行,所以新的 sw 無法啟用,你需要關閉整個瀏覽器才能把舊的 sw 關閉,再次開啟網頁就能看到新的 sw 運作了。

有乙個方便一點的方法,配置

workboxoptions: ,
之後,第乙個選項如其字面意思,會跳過 waiting 狀態,而 clientsclaim 可以讓 sw 進入 activated 狀態後立即控制頁面(但是實際上,sw 即使立刻控制頁面並輸出新資料,spa 也要重新整理才能渲染為最新版本,但這也總比關閉瀏覽器好多了)。

詳細原理請查閱谷歌官方資料(需要梯子)。

最後,給你乙個佛系重新整理方法

service worker 的特殊之處除了由瀏覽器觸發更新之外,還應用了特殊的快取策略: 如果該檔案已 24 小時沒有更新,當 update 觸發時會強制更新。這意味著最壞情況下 service worker 會每天更新一次。

完整配置位址

這是乙個最最簡單的 pwa,沒有對 sw 進行深度配置,很多功能沒有用上。vue-cli3 搭建的專案使用workbox-webpack-plugin

乙個激情任務的誕生

時間線 2014年 assert這個東西,在前年c 的 中,我偶然一瞥,不以為意,略懂而過 時間線 2015年年底 去年年底,需要為重構的專案新增單元測試,好嘞,就私下來試試,淺嚐很易,便不以為意,現在忘記了是什麼原因,隔了幾天拉著lll到隔壁小黑屋,耗時一天半,在網上不斷查,深入去研究單元測試 深...

乙個程序的誕生與死亡

createprocess啟用的。2.產生乙個程序核心物件,計數值為1 3.系統為此程序建立乙個4gb位址空間 5.系統為此程序建立乙個執行緒,稱為主線程。執行緒才是cpu時間的分配物件。6.系統呼叫c runtime函式庫的startup code 10.回到startup code 11.回到系...

乙個時鐘元件的誕生歷程

後來,興趣來了,在原有的基礎上新增一些比較實用的功能 我認為比較之前的,哈哈 將它整理成乙個 jquery 元件。這個是元件的 github 位址 本來呢,這個元件的事就到這子,因為我的專案中也沒咋用這元件。再加上,我後來的專案一般都是用 vue 寫的,所以,這個元件就這樣被擱那了。去年7月 也就是...