摘要:二簡要介紹是一段腳本,在后臺運行。作為一個獨立的線程,不會對頁面造成阻塞。本質(zhì)上充當(dāng)應(yīng)用程序與瀏覽器之間的代理服務(wù)器。可以做到離線使用消息推送后臺自動更新,的出現(xiàn)是正是為了使得也可以具有類似的能力。在我們的例子例,是在,的根目錄是。
一、背景
taro框架轉(zhuǎn)的h5,想在無網(wǎng)絡(luò)狀態(tài)下可以控制展示給用戶的界面,使用客戶端離線緩存可以達到目的,并且可以將靜態(tài)資源進行緩存,從而減少白屏?xí)r間,加快頁面相應(yīng)速度。
二、service worker簡要介紹:service worker是一段腳本,在后臺運行。作為一個獨立的線程,不會對頁面造成阻塞。本質(zhì)上充當(dāng)Web應(yīng)用程序與瀏覽器之間的代理服務(wù)器。native app可以做到離線使用、消息推送、后臺自動更新,service worker的出現(xiàn)是正是為了使得web app也可以具有類似的能力。在線上必須在 HTTPS 環(huán)境下才能工作,或者本地localhost域名也是可以的。
三、使用方法第一步選擇npm包,我用的是sw-precache-webpack-plugin這個包,基于webpack的插件,操作簡單使用方便,詳情請看文檔
然后進行基于webpack的配置,下面例子是taro框架h5部分的配置內(nèi)容
h5: { publicPath: "/", staticDirectory: "static", webpackChain(chain, webpack) { chain.plugin("sw") .use(require("sw-precache-webpack-plugin"), [{ cacheId: "name", filename: "service-worker.js", filepath: path.resolve(__dirname, "../src/service-worker.js"), // importScripts: [], // 需緩存的文件配置, 需動態(tài)緩存的放到runtimeCaching中處理 staticFileGlobs: [], mergeStaticsConfig: true, minify: true, verbose: true, runTimeCaching: [ // 頁面動態(tài)文件 { urlPattern: /pages/.*/, handler: "networkFirst" }, { urlPattern: /api/.*/, handler: "networkFirst" } ] }] ); }, module: { postcss: { autoprefixer: { enable: true } } } }
ok,現(xiàn)在已經(jīng)配置完了,下一步只要在入口文件里注冊service-worker就行啦,我是在HTML里加的,代碼如下:
大功告成,現(xiàn)在可以在本地調(diào)試了,本地如果啟動了webpack-dev-server,則需要:webpack添加配置:
module.exports = { devServer: { setup: function (app) { app.get("/service-worker.js", function (req, res) { res.set({ "Content-Type": "application/javascript; charset=utf-8" }); res.send(fs.readFileSync("build/service-worker.js")); }); } } }
此時訪問localhost就可以啟用service-worker啦,如果配置了這些內(nèi)容service-worker還沒有注冊成功的話,可能的原因如下:
你沒有在 HTTPS 或localhost下運行你的項目。
service worker文件的地址沒有寫對— 需要相對于 origin , 而不是 app 的根目錄。在我們的例子例, service worker 是在 https://mdn.github.io/sw-test...,app的根目錄是 https://mdn.github.io/sw-test/。應(yīng)該寫成 /sw-test/sw.js 而非 /sw.js.
service worker 在不同的 origin 而不是你的app的,這是不被允許的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/106004.html
摘要:另一部分屬于進程,它重新在后臺起了一個進程,它和應(yīng)用的主進程互不影響,可以同時執(zhí)行。其中一般作為應(yīng)用程序瀏覽器和網(wǎng)絡(luò)如果可用之間的代理服務(wù)。他們還將允許訪問推送通知和后臺同步。然后開始在進程中通過事件,來監(jiān)聽請求,并對請求和響應(yīng)進行緩存。 前言:我們的應(yīng)用可以分為兩部分,一部分是屬于主進程的(包括js(同步,異步),以及dom渲染等等),在一個時刻點,只能執(zhí)行一個,要么先去渲染dom,...
摘要:和的關(guān)系不是一項技術(shù),也不是一個框架,我們可以把她理解為一種模式,一種通過應(yīng)用一些技術(shù)將在安全性能和體驗等方面帶來漸進式的提升的一種的模式。這里需要注意的是,首次注冊線程的頁面需要再次加載才會受其控制。 1. PWA和Service Worker的關(guān)系 PWA (Progressive Web Apps) 不是一項技術(shù),也不是一個框架,我們可以把她理解為一種模式,一種通過應(yīng)用一些技...
摘要:和的關(guān)系不是一項技術(shù),也不是一個框架,我們可以把她理解為一種模式,一種通過應(yīng)用一些技術(shù)將在安全性能和體驗等方面帶來漸進式的提升的一種的模式。這里需要注意的是,首次注冊線程的頁面需要再次加載才會受其控制。 1. PWA和Service Worker的關(guān)系 PWA (Progressive Web Apps) 不是一項技術(shù),也不是一個框架,我們可以把她理解為一種模式,一種通過應(yīng)用一些技...
摘要:配合的項,能夠?qū)崿F(xiàn)緩存外部資源的功能。允許接受來自的消息,默認值為。檢查新版本的的更新信息。這也是我在研究階段直接使用時所發(fā)現(xiàn)的問題。建議僅在生產(chǎn)模式內(nèi)使用。 showImg(https://segmentfault.com/img/bVSVG1?w=1178&h=484); 談起PWA,許多人可能還只停留在了解的層面,比較少在實踐中真正地嘗試過,更多的僅僅是對著網(wǎng)上的教程和例子大概玩...
摘要:為了解決這個問題,我的解決方案是使用,這樣就可以將緩存到本地,再次發(fā)布后,會使舊的失效,重新請求并緩存。結(jié)語幾分鐘就搞定了,然后把之前的一個基于的后臺模板項目也升級了,如果有相同需求的可以參考下。 為什么要給 VUE 項目添加 PWA 為什么要添加?因為不管是部署在 IIS,還是 nginx,每次應(yīng)用部署后,再次訪問因為舊的 js 已經(jīng)不存在,所以頁面訪問的時候會整個報錯,報錯的結(jié)果就...
閱讀 1762·2021-10-12 10:12
閱讀 2530·2021-09-29 09:42
閱讀 2711·2021-09-03 10:28
閱讀 2249·2019-08-30 15:54
閱讀 1153·2019-08-30 15:53
閱讀 1388·2019-08-30 11:26
閱讀 3357·2019-08-30 11:02
閱讀 2134·2019-08-30 11:02