【前-workbox-模塊1】workbox

1、什么是workbox SW

workbox-sw模塊提供了一種非常簡單的方法來啟動和運行Workbox模塊怎囚,并簡化了Workbox模塊的加載卿叽,也提供了一些簡單的幫助方法。

開發(fā)者可以通過官方的CDN使用workbox-sw恳守,或者將它與自己服務(wù)器上的一組workbox文件一起使用痹扇。

2玻蝌、使用workbox sw 通過cdn

開始使用此模塊的最簡單方法是通過CDN。 開發(fā)者只需將以下內(nèi)容添加到sw.js:

importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js');

添加了這段代碼,開發(fā)者將在服務(wù)工作者中擁有workbox名空間伐憾,該命名空間將提供對所有Workbox模塊的訪問。

當(dāng)?shù)谝淮我眠@些模塊時,workbox-sw將檢測到該模塊并在使模塊可用之前加載該模塊。 您可以在DevTools的網(wǎng)絡(luò)選項卡中看到這種情況策精。

這些文件將由瀏覽器緩存,以供將來離線使用崇棠。

3咽袜、使用本地 Workbox Files

如果不想使用CDN,則可以輕松切換到自己域中托管的Workbox文件枕稀。

最簡單的方法是通過workbox-cli的copyLibraries命令或GitHub Release獲取文件询刹,然后通過modulePathPrefix配置選項告訴workbox-sw在哪里找到這些文件。

如果你把文件放在/ third_party / workbox /下萎坷,你會像這樣使用它們:

importScripts('/third_party/workbox/workbox-sw.js');

workbox.setConfig({
  modulePathPrefix: '/third_party/workbox/'
});

這樣你就能使用本地的workbox files

4凹联、避免異步導(dǎo)入

在整個workbox體系下,第一次加載新模塊涉及調(diào)用importScripts()以及相應(yīng)JavaScript文件的路徑(在CDN上托管食铐,或通過本地URL)匕垫。 在任何一種情況下,都有一個重要的限制:對importScripts()的隱式調(diào)用只能在service worker的安裝處理程序內(nèi)部或在service worker腳本的同步初始執(zhí)行期間發(fā)生虐呻。

為了避免違反此限制象泵,最佳做法是在任何事件處理程序或異步函數(shù)之外,使用workbox.*的引用方式來控制命名空間斟叼。

例如偶惠,以下sw.js的代碼就符合要求:

importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js');

// This will work!
workbox.routing.registerRoute(
  new RegExp('\.png$'),
  workbox.strategies.cacheFirst()
);

但是,如果沒有在sw.js的其他位置引用workbox.strategies朗涩,則此代碼可能會出現(xiàn)問題:

importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js');

self.addEventListener('fetch', (event) => {
  if (event.request.url.endsWith('.png')) {
    //這段代碼會導(dǎo)致workbox-strategies.js在一個fetch函數(shù)的處理線程中被引用忽孽,應(yīng)該
    // 在這個初始化步驟之外,同步地執(zhí)行谢床。
    const cacheFirst = workbox.strategies.cacheFirst();
    event.respondWith(cacheFirst.makeRequest({request: event.request}));
  }
});

如果需要編寫會違反限制的代碼兄一,則可以使用workbox.loadModule()方法顯式觸發(fā)事件處理程序之外的importScripts()調(diào)用:

importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js');

// 這將觸發(fā)workbox.strategies及其依賴項的importScripts()
workbox.loadModule('workbox-strategies');

self.addEventListener('fetch', (event) => {
  if (event.request.url.endsWith('.png')) {
    // 引用workbox.strategies現(xiàn)在將按預(yù)期工作。
    const cacheFirst = workbox.strategies.cacheFirst();
    event.respondWith(cacheFirst.makeRequest({request: event.request}));
  }
});

或者识腿,開發(fā)者可以在事件處理程序之外創(chuàng)建對相關(guān)命名空間的引用出革,然后在以后使用該引用:

importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js');

// 這將觸發(fā)workbox.strategies及其依賴項的importScripts()
const {strategies} = workbox;

self.addEventListener('fetch', (event) => {
  if (event.request.url.endsWith('.png')) {
    //使用先前初始化的策略將按預(yù)期工作。
    const cacheFirst = strategies.cacheFirst();
    event.respondWith(cacheFirst.makeRequest({request: event.request}));
  }
});

某些版本的Chrome不遵守此限制渡讼,并且對importScripts()的異步調(diào)用不會觸發(fā)預(yù)期的失敗骂束。 建議開發(fā)人員不要依賴這種破壞的行為。 Chrome計劃進行更改以開始禁用此用法成箫,使其與其他瀏覽器的功能一致展箱。

5、強制使用調(diào)試或生產(chǎn)構(gòu)建

所有Workbox模塊都帶有兩個版本蹬昌,一個包含日志記錄和其他類型檢查的調(diào)試版本混驰,以及一個剝離日志記錄和類型檢查的生成版本。

默認(rèn)情況下,workbox-sw將使用localhost上的站點的調(diào)試版本账胧,但對于任何其他源竞慢,它將使用生成版本先紫。

如果要強制調(diào)試或生成版本治泥,請設(shè)置debug config選項。

workbox.setConfig({
  debug: 
});

6遮精、Skip Waiting 和 Clients Claim

一些開發(fā)人員希望能夠發(fā)布新的service worker并讓其盡快更新和控制網(wǎng)頁居夹,從而跳過默認(rèn)的service woker的生命周期。

如果確實需要這么做本冲,workbox-sw提供了一些幫助方法來簡化:

workbox.skipWaiting();
workbox.clientsClaim();

如果網(wǎng)絡(luò)應(yīng)用程序延遲加載具了有唯一版本的資源准脂,例如其網(wǎng)址中的哈希值,則建議避免使用skip waiting檬洞。 在延遲加載先前已預(yù)先緩存并在service worker激活狀態(tài)下狸膏,更新期間清除URL時,啟用它可能會導(dǎo)致失敗添怔。

筆者個人訂閱號~歡迎小伙伴們關(guān)注


微信公眾號-感謝關(guān)注

若有疑問可以QQ聯(lián)系筆者湾戳,雖然不一定100%解決你的問題,但是可以交流探討一波:2276604211

順便打個廣告:如果有想入職中國銀聯(lián)上海技術(shù)開發(fā)的童鞋广料,也可以加上面的QQ資訊砾脑,筆者可以幫你回答一些相關(guān)問題~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市艾杏,隨后出現(xiàn)的幾起案子韧衣,更是在濱河造成了極大的恐慌,老刑警劉巖购桑,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畅铭,死亡現(xiàn)場離奇詭異,居然都是意外死亡勃蜘,警方通過查閱死者的電腦和手機硕噩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來元旬,“玉大人榴徐,你說我怎么就攤上這事≡裙椋” “怎么了坑资?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長穆端。 經(jīng)常有香客問我袱贮,道長,這世上最難降的妖魔是什么体啰? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任攒巍,我火速辦了婚禮嗽仪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柒莉。我一直安慰自己闻坚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布兢孝。 她就那樣靜靜地躺著窿凤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跨蟹。 梳的紋絲不亂的頭發(fā)上雳殊,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機與錄音窗轩,去河邊找鬼夯秃。 笑死,一個胖子當(dāng)著我的面吹牛痢艺,可吹牛的內(nèi)容都是我干的仓洼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼腹备,長吁一口氣:“原來是場噩夢啊……” “哼衬潦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起植酥,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤镀岛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后友驮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漂羊,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年卸留,在試婚紗的時候發(fā)現(xiàn)自己被綠了走越。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡耻瑟,死狀恐怖旨指,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喳整,我是刑警寧澤谆构,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站框都,受9級特大地震影響搬素,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一熬尺、第九天 我趴在偏房一處隱蔽的房頂上張望摸屠。 院中可真熱鬧,春花似錦粱哼、人聲如沸季二。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戒傻。三九已至,卻和暖如春蜂筹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芦倒。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工艺挪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兵扬。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓麻裳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親器钟。 傳聞我的和親對象是個殘疾皇子津坑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,855評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)傲霸,斷路器疆瑰,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 我,只想做我本來的樣子昙啄。做個簡簡單單的自己穆役。 也許有人說我太直,太白梳凛,太傻耿币,太純真。雖然說我許多時候都是多愁善感的...
    咸小雨閱讀 596評論 2 3
  • 上班族的我們韧拒,正如一首歌所唱“坐在格子間敲打著手指淹接,卻感覺生命此刻像是靜止∨岩纾”生命靜止塑悼,脂肪卻在悄悄生長。所以雇初,胖...
    Back2脊態(tài)健康閱讀 384評論 0 0
  • 優(yōu)秀的人總是有某些優(yōu)秀的特質(zhì)拢肆。軍訓(xùn)晚會上的一段拉丁舞使得馮思妍成了系里的名人,輔導(dǎo)員讓她競選班長,可她只愿當(dāng)個宣...
    陌上寧秋閱讀 174評論 0 0