ReinerLau1 / Blog

Just a blog
MIT License
0 stars 0 forks source link

对Service Worker的理解 #291

Closed ReinerLau1 closed 2 years ago

ReinerLau1 commented 2 years ago

概念

ReinerLau1 commented 2 years ago

实现

if (navigator.serviceWorker) {
  navigator.serviceWorker
    .register('sw.js')
    .then(function(registration) {
      console.log('service worker 注册成功')
    })
    .catch(function(err) {
      console.log('servcie worker 注册失败')
    })
}
// sw.js
// 监听 `install` 事件,回调中缓存所需文件
self.addEventListener('install', e => {
  e.waitUntil(
    caches.open('my-cache').then(function(cache) {
      return cache.addAll(['./index.html', './index.js'])
    })
  )
})
// 拦截所有请求事件
// 如果缓存中已经有请求的数据就直接用缓存,否则去请求数据
self.addEventListener('fetch', e => {
  e.respondWith(
    caches.match(e.request).then(function(response) {
      if (response) {
        return response
      }
      console.log('fetch source')
    })
  )
})
ReinerLau1 commented 2 years ago

效果

打开页面,可以在开发者工具中的 Application 看到 Service Worker 已经启动了 image 在 Cache 中也可以发现所需的文件已被缓存 image