亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

PWA 漸進式實踐 (2) - Service Worker

2024-04-27 15:07:41
字體:
來源:轉載
供稿:網友

作為 PWA 的象征之一,我們首先做的,就是加上 Service Worker。

添加 Service Worker

注冊

我們的項目是使用 ejs 在 webpack 階段注入幾個變量生成最后的 index.html 的,所以直接拿 index.ejs 動刀即可:

<body> <div id="container"></div> <script src="<%= bundle %>"></script> <script> if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/service-worker.js', { scope: './' }).then(function(registration) { registration.onupdatefound = function() { if (navigator.serviceWorker.controller) { const installingWorker = registration.installing; installingWorker.onstatechange = function() { switch (installingWorker.state) { case 'installed': break; case 'redundant': throw new Error('The installing ' + 'service worker became redundant.'); default: // Ignore } }; } }; }).catch(function(e) { console.error('Error during service worker registration:', e); }); } else { console.log('service worker is not supported'); } </script>

即 body 中,第二個 script 標簽的內容,其參數 service-worker.js,是與 index.html 在同一個目錄的空文件:

// This file is intentionally without code.// It's PResent so that service worker registration// will work when serving from the 'public' directory.

實際上打包后會生成真正的 service-worker.js,所以現在只是用來占個位子。

納尼?這樣就好了?

確實,這樣,我們就已經完成了注冊,這也是 PWA 和微信小程序這種二流方案不同的地方,其更注重于如何提高現有設計實現下的體驗,使用開放的標準并進行推進。

Cache 策略

下一步就是增加我們的緩存策略了,我們需要安裝 2 個小工具:

npm install sw-precache --savenpm install sw-toolbox --save

然后在 package.json 里面更新一下我們的 script:

"scripts": { "build": "npm run copy && node run build && npm run precache", "build:debug": "npm run copy && node run build --debug && npm run precache", "copy": "cp node_modules/sw-toolbox/sw-toolbox.js public/sw-toolbox.js", "precache": "./node_modules/sw-precache/cli.js --root=public --config=sw-precache-config.json"}

如上,增加 copy 和 precache 任務,并更新 build,在 build 前后插入新的 task。

然后就是配置文件了,在項目目錄下,增加 sw-precache-config.json 文件:

{ "staticFileGlobs": [ "public/dist/**.CSS", "public/dist/**.png", "public/dist/**.js" ], "importScripts": [ "sw-toolbox.js", "runtime-caching.js" ], "stripPrefix": "public/", "verbose": true}

在 public 目錄下,增加 runtime-caching.js 文件:

// global.toolbox is defined in a different script, sw-toolbox.js, which is part of the// https://github.com/GoogleChrome/sw-toolbox project.// That sw-toolbox.js script must be executed first, so it needs to be listed before this in the// importScripts() call that the parent service worker makes.(function (global) { // See https://github.com/GoogleChrome/sw-toolbox/blob/6e8242dc328d1f1cfba624269653724b26fa94f1/README.md#toolboxroutergeturlpattern-handler-options // and https://github.com/GoogleChrome/sw-toolbox/blob/6e8242dc328d1f1cfba624269653724b26fa94f1/README.md#toolboxfastest // for more details on how this handler is defined and what the toolbox.fastest strategy does. global.toolbox.router.get('/(.*)', global.toolbox.fastest, { origin: //.(?:googleapis|gstatic|firebaseio|appspot)/.com$/, }); global.toolbox.router.get('/(.+)', global.toolbox.fastest, { origin: 'https://api.pai.bigins.cn/', }); global.toolbox.router.get('/(.+)', global.toolbox.fastest, { origin: 'https://qa.api.pai.bigins.cn/', }); global.toolbox.router.get('/*', global.toolbox.fastest);}(self));

運行一下 npm run build,發現 service-worker.js 被更新了,里面是生成的策略腳本。

評測

再次運行 Lighthouse 后,發現我們的評分已經嗖嗖嗖上去了:

After service worker

離線依然返回 200

這里的秘密就在 runtime-caching.js 文件里,我們更新一下:

// global.toolbox is defined in a different script, sw-toolbox.js, which is part of the// https://github.com/GoogleChrome/sw-toolbox project.// That sw-toolbox.js script must be executed first, so it needs to be listed before this in the// importScripts() call that the parent service worker makes.(function (global) { // See https://github.com/GoogleChrome/sw-toolbox/blob/6e8242dc328d1f1cfba624269653724b26fa94f1/README.md#toolboxroutergeturlpattern-handler-options // and https://github.com/GoogleChrome/sw-toolbox/blob/6e8242dc328d1f1cfba624269653724b26fa94f1/README.md#toolboxfastest // for more details on how this handler is defined and what the toolbox.fastest strategy does. global.toolbox.router.get('/(.*)', global.toolbox.fastest, { origin: //.(?:googleapis|gstatic|firebaseio|appspot)/.com$/, }); global.toolbox.router.get('/(.+)', global.toolbox.fastest, { origin: 'https://api.pai.bigins.cn/', }); global.toolbox.router.get('/(.+)', global.toolbox.fastest, { origin: 'https://qa.api.pai.bigins.cn/', }); global.toolbox.router.get('/(.+)', global.toolbox.fastest, { origin: 'https://pai.bigins.cn/', }); global.toolbox.router.get('/*', global.toolbox.fastest); global.toolbox.precache(['/index.html', '/index.css', '/img/logo.png']);}(self));

然后再提交構建一下,在 Chrome 的 Network Panel 中,勾選 Offline,然后刷新頁面,哇,依然可以用誒。

評測

After precache

通過完善 Service Worker,我們的評分已經嗖嗖嗖上了80,達到了83分。

What’s next

What's next

剩下的就是一些比較棘手的性能和體驗問題了,我們下回見。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕在线看视频国产欧美在线看完整| 亚洲国产成人精品久久久国产成人一区| 久久香蕉精品香蕉| 欧美另类暴力丝袜| 国产精品嫩草影院一区二区| 亚洲国产欧美精品| 国产精品国产自产拍高清av水多| 91精品视频在线| 国产精品久久久av久久久| 欧美电影免费观看高清完整| 岛国视频午夜一区免费在线观看| 亚洲天堂开心观看| 亚洲国产日韩欧美在线图片| 日韩高清av一区二区三区| 国产原创欧美精品| 九九视频这里只有精品| 久久免费成人精品视频| 久久久久久97| 亚洲第一综合天堂另类专| 亚洲风情亚aⅴ在线发布| 国产精品爽爽爽| 日韩av中文在线| 久青草国产97香蕉在线视频| 亚洲第五色综合网| 日韩大胆人体377p| 国产91精品网站| 性色av一区二区三区在线观看| 中文字幕亚洲情99在线| 国产一区玩具在线观看| 日韩精品在线观看一区| 国产精品扒开腿爽爽爽视频| 亚洲国产美女精品久久久久∴| 青青草99啪国产免费| 国产一区二区在线播放| 欧美中文字幕第一页| 日韩电影免费观看在线| 亚洲精品电影网在线观看| 亚洲天堂av高清| 日韩亚洲精品电影| 亚洲电影av在线| 亚洲电影中文字幕| 国产自产女人91一区在线观看| 日韩人体视频一二区| 欧美丰满少妇xxxx| 日韩欧美成人区| 亚洲国产精品字幕| 日韩在线不卡视频| 亚洲国产精品va在线| 国产精品国产三级国产aⅴ9色| 色婷婷**av毛片一区| 国产成人啪精品视频免费网| 国产精品视频永久免费播放| 欧美放荡办公室videos4k| 欧美午夜宅男影院在线观看| 国产精品日韩一区| 日韩精品视频免费在线观看| 久久男人资源视频| 91sao在线观看国产| 国产成人综合精品| 69视频在线播放| 亚洲男女性事视频| 97超视频免费观看| 欧洲永久精品大片ww免费漫画| 亚洲色在线视频| 国产中文字幕日韩| 亚洲天堂影视av| 亚洲第一色中文字幕| 久久久久久12| 亚洲免费一级电影| 中文字幕精品一区久久久久| 欧美一区二区三区免费观看| 欧美成人中文字幕在线| 国产精品久久久久久久久久三级| 日韩有码在线播放| 中文字幕精品—区二区| 亚洲天堂男人天堂女人天堂| 成人伊人精品色xxxx视频| 国产精品久久久久久一区二区| 亚洲精品一二区| 日韩免费av一区二区| 亚洲精品456在线播放狼人| 国产亚洲精品美女久久久| 欧美日本高清一区| 欧美一区二区影院| 成人欧美在线视频| 日韩成人在线视频| 国产精品一区电影| 欧美精品videos性欧美| 欧洲精品在线视频| 另类少妇人与禽zozz0性伦| 亚洲欧美制服丝袜| 欧美成人激情在线| 欧美成人网在线| 国产精品自产拍在线观看中文| 欧美黄网免费在线观看| 国产精品香蕉av| 精品国产一区二区三区久久狼黑人| 国产在线精品播放| 91免费电影网站| 中文字幕精品在线视频| 日韩视频在线观看免费| 亚洲第一网中文字幕| 欧美激情奇米色| 日韩精品高清视频| 欧美亚洲一级片| 福利一区福利二区微拍刺激| 国外成人在线播放| 欧美电影电视剧在线观看| 不卡av电影院| 高清一区二区三区四区五区| 久久久久久香蕉网| 久久久伊人日本| 日韩资源在线观看| 日韩欧美在线观看视频| 夜夜嗨av一区二区三区四区| 亚洲在线免费观看| 久久躁狠狠躁夜夜爽| 亚洲成av人影院在线观看| 日韩在线观看成人| 久久色精品视频| 久久成人精品电影| 亚洲97在线观看| 高清欧美电影在线| 中文字幕亚洲一区| 午夜精品一区二区三区在线视频| 日韩亚洲综合在线| 自拍亚洲一区欧美另类| 亚洲第一综合天堂另类专| 欧美区二区三区| 亚洲激情在线视频| 欧美黑人一区二区三区| 国产色综合天天综合网| 亚洲精品久久久久久久久久久久久| 91精品国产自产在线老师啪| 91视频国产一区| 亚洲桃花岛网站| 国产精品久久久久av免费| 久久久久久网址| 亚洲视频在线观看视频| 91国内免费在线视频| 亚洲www在线观看| 国产精品自产拍在线观看中文| 国产精品一二区| 亚洲图片欧洲图片av| 亚洲成av人影院在线观看| 欧美另类极品videosbest最新版本| 欧美一级电影在线| 国产日韩欧美中文在线播放| 国产在线拍揄自揄视频不卡99| 狠狠综合久久av一区二区小说| 国产精品h在线观看| 国产伊人精品在线| 久久精品精品电影网| 亚洲影视中文字幕| 欧洲亚洲在线视频| 欧美视频裸体精品| 亚洲欧美国内爽妇网| 成人精品久久久| 精品国产91久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美大片免费观看在线观看网站推荐| 在线视频欧美日韩精品| 中文字幕日本精品| 一区二区三区视频免费|