国产精品成I2018好看的中文在线观看I在线观看爱爱视频I日韩在线第一区I五月开心六月婷婷I日韩视频一I国产视频色I久久成人午夜视频

網站開發 APP開發 小程序開發 SEO優化 公司新聞

Service Worker:讓網頁無網絡也能訪問

2017-02-17 00:00:00
1804

  介紹

  PWA(Progressive Web Apps) 一定是將來的移動開發趨勢。

  Progressive Web Apps 比小程序還要方便,對于首次訪問的用戶可以直接在瀏覽器中進行訪問,不需要安裝應用。即使在比較糟糕的網絡環境下,也能夠快速地加載,且能夠推送相關消息, 也可以像原生應用那樣添加至桌面或瀏覽器主屏,能夠有全屏瀏覽的體驗。

  PWA 和 Service Worker 是什么關系?Service Worker 是一個運行在瀏覽器后臺進程里的js,基于它可以實現消息推送,靜默更新以及攔截和處理網絡請求,包括可編程的響應緩存管理,是 PWA 的核心。

  工作原理

  Service worker 是一個完全獨立于 Web 頁面的 js 腳本,有他自己的生命周期。

  每個 service worker 會對應一個緩存池,每個緩存池有多個緩存倉庫。

  首先講講它的聲明周期,借用 Google 的一張圖片:

  Serice Worker

  若網站對應的 cacheName 沒有 install,則首先觸發 install事件。

  若install失敗,則退出等待下次訪問再啟動;否則觸發activate事件。

  在activate中,判斷當前頁面是否在上文聲明的 filesToCache 列表中,如果是則接管網頁的顯示。

  接管網頁以后,如果當前內存不足,會被殺死;否則等待處理fetch和message事件。這兩個事件一個是當網絡請求時,或者其他網頁發出了消息時。 本文只講如何讓你的網頁無網絡也能訪問,沒有講這兩個事件,下一篇文章再給大家講講 service worker 深度使用。

  從使用開始

  準備工作

  首先你的站點必須支持https 。

  其次,你至少得懂一點 js開發。

  最后,你得有一個 52 或以上的版本的 Chrome 用作調試。

  注冊 Service Worker

  首先,在你的網站根目錄下創建一個 service-worker.js 文件(文件名自定)。

  這個 service-worker.js 文件必須放在跟目錄,因為 service workers 的作用范圍是根據其在目錄結構中的位置決定的。

  然后需要檢查瀏覽器是否支持 service workers,如果支持,就注冊 service worker,將下面代碼添加至網頁要加載的js中。

  if('serviceWorker' in navigator) {      //注冊上一步創建的js文件    navigator.serviceWorker          .register('/service-worker.js')          .then(function() { console.log('Service Worker Registered'); });  }

  加載緩存

  當用戶訪問一個注冊了 service worker 的頁面時,會觸發一個叫install事件,所以我們首先對這個事件監聽。

  var cacheName = 'oslab-kymjs-blog';var filesToCache = [];self.addEventListener('install', function(e) {  console.log('[ServiceWorker] Install');  e.waitUntil(    caches.open(cacheName).then(function(cache) {      console.log('[ServiceWorker] Caching app shell');      return cache.addAll(filesToCache);    })  );});

  當監聽到install事件以后,去緩存池打開名為 oslab-kymjs-blog 的緩存倉庫。

  每個 service worker 會對應一個緩存池,每個緩存池有多個緩存倉庫。

  只要緩存被打開,就調用 cache.addAll() 并傳入一個 url 列表,然后加載這些資源并將響應添加至緩存。

  有個注意事項要知道 cache.addAll() 方法中,如果某個文件下載失敗了,那么整個緩存就會失敗,service worker 的install事件也將會失敗。而如果install失敗了,那么接下來 service worker 就完全不會工作了。 所以一定要注意,文件列表一定不要太長了,越長造成失敗的可能性就越高,每個要緩存的頁面越大失敗的可能性也越高。

  調試

  用 Chrome Developer Tools 調試 Service Worker 非常方便。

  首先 run 起你本地的 server(我博客是 jekyll 生成的,所以直接用了 jekyll 服務),然后 Chrome 右上角三個點,More Tools,Developer Tools。(mac快捷鍵 cmd+opt+i)

  切換到 Application 視圖

  你應該能看到這樣的一個頁面

  Serice Worker

  首次運行應該顯示空的,看不到東西,刷新一下就可以了。但如果刷新后還是看不到,這意味著當前打開的頁面沒有已經被注冊的 Service Worker,檢查一下 注冊 步驟的js是否被加載了吧。

  刷新前 注意勾選【update on reload】不然每次刷新都會起一個新的service worker,然后由于是串行執行,會等待前一個執行完,不然得手動點【skipWaiting】。

  然后如果勾選了【update on reload】,可能會看到這個警告,無所謂,忽略它就好了。

  Serice Worker

  刪除無用緩存

  當 service worker 開始啟動時,就會觸發 activate 事件。 所以我們監聽 activate 在這里更新緩存。

  self.addEventListener('activate', function(e) {    console.log('[ServiceWorker] Activate');    e.waitUntil(      caches.keys().then(function(keyList) {        return Promise.all(keyList.map(function(key) {          console.log('[ServiceWorker] Removing old cache', key);          if (key !== cacheName) {            return caches.delete(key);          }        }));      })    );  });

  以上代碼表示,如果執行到了 activate,首先判斷現在緩存池中的緩存倉庫 cacheName 是否和我們聲明的 cacheName 同一個,如果不是,就清空緩存池中的無用緩存(install中下載新的緩存,activate 中刪除舊緩存)。所以建議大家在 cacheName 的末尾加一個版本號,這樣可以始終讓service worker 加載最新的緩存。

  至此,就為我們的博客完整接入了 service worker。

?
主站蜘蛛池模板: 99re国产视频 | 日韩久久一区 | 人人添人人澡人人澡人人人爽 | 91最新视频在线观看 | 欧美一级免费片 | 欧美韩国日本在线 | 国产一级电影免费观看 | 美女性爽视频国产免费app | 丝袜制服综合网 | 日韩成人免费电影 | 成人黄大片视频在线观看 | 国产不卡av在线播放 | 精品久久久久久国产91 | 国产一区网址 | 啪啪肉肉污av国网站 | 久久99精品久久久久久 | 久久99久久精品 | 99久久精品国产一区二区成人 | 久久专区| 天天射狠狠干 | 一区二区三区久久精品 | 99热只有精品在线观看 | www.狠狠色.com | 麻豆视频在线免费看 | 久久精品99国产国产精 | 天天色综合1| 国产视频资源在线观看 | 午夜精品中文字幕 | 国产久草在线观看 | 人交video另类hd | 韩国av电影在线观看 | 天天干视频在线 | 久久高清| 亚洲小视频在线 | 久久精精品视频 | 色www精品视频在线观看 | 久久精品一区二区三区国产主播 | www.激情五月.com| 国产群p视频 | 在线黄色免费av | 国产精品毛片一区二区三区 | 色射爱| 91精品91| av九九| 亚洲一区二区视频 | 丁香六月婷婷激情 | 日韩成人在线一区二区 | 久热久草 | 黄色av免费看 | 日韩精品免费一区二区 | 成年人视频在线免费播放 | 在线观看视频黄 | 精品一区二区免费视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 久久99国产精品久久99 | 天天伊人狠狠 | 中文字幕精品一区 | 日日干av | 日日干干夜夜 | 久久人人97超碰精品888 | 精品国产一区二区三区免费 | 美女视频黄是免费的 | 中文在线www| 中文字幕av最新 | 中文字幕乱码日本亚洲一区二区 | 成人啪啪18免费游戏链接 | 日韩美女免费线视频 | 开心激情五月网 | 奇米导航 | 天堂中文在线视频 | 免费视频一二三区 | 日韩视频三区 | 正在播放国产一区 | 最新真实国产在线视频 | 日韩欧美大片免费观看 | 国产美女精品视频 | 97免费在线观看视频 | 日本一区二区不卡高清 | 日韩av影视在线观看 | 国产精品99蜜臀久久不卡二区 | 国产麻豆精品传媒av国产下载 | 视频在线91| www.一区二区三区 | 免费网站在线观看成人 | 99视频精品 | 成人免费观看完整版电影 | 伊人手机在线 | 日本mv大片欧洲mv大片 | 日韩视频欧美视频 | 欧美巨乳网 | 国产精品地址 | 欧美色一色 | 久久国产精品一区二区三区 | 国产黄色特级片 | 亚洲视频免费在线 | 久久久久久久久国产 | 中文有码在线视频 | 天天干天天操天天做 | 国产精品久久久久久久午夜 |