PWA:Service worker生命周期事件对网络资源的处理

services worker 注册

window.onload=function(){//网页加载完执行
         if('serviceWorker'in navigator){//浏览器兼容
             navigator.serviceWorker.register('sw.js')//注册serviceworker并返回一个promise对象
             .then(resitration=>{console.log(resitration)})
             .catch(err=>{console.log(err)})
         }
     }

sw.js

console.log('111111111111111');

在这里插入图片描述

打开VS自带的服务器

在这里插入图片描述

在这里插入图片描述

services worker 生命周期

Service worker生命周期事件

** instal事件会在service worker注册成功的时候触发,主要用于缓存资源**
** activate事件会在service worker激活的时候触发, 主要用于删除旧的资源**
fetch事件会在发送请求的时候触发,主要用于操作缓存或者读取网络资源

●如果sw.js发生 了改变,install事件 会重新触发
●activate事件会在insall事件后触发,但是如果现在已经存在service worker了, 那么就处于等待状态,直到
当前service worker终止
●可以通过self.skiWaiting()方法跳过等待, 返回一个promise对象

self.addEventListener('install',event=>{   console.log('install',event);  self.skipWaiting();  });

●可以通过event.waitUntil0方法扩的参数是一个promise对象, 会在promise结束后才会结束当前生命周期函数,防止浏览器在异步操作之前就停止了生命周期

self.addEventListener('install',event=>{   console.log('install',event); event.waitUntil(self.skipWaiting());  });

●service worker激活后, 会在下次刷新页面的时候生效,可以通过self.clients.claim()立即获取控制权

self.addEventListener('activate',event=>{   console.log('activate',event); event.waitUntil(self.ClientRectList.claim() );  });

fetch事件,抓取网络请求
在这里插入图片描述

在React中利用Service Worker构建 Progressive Web App (PWA) 的过程主要包括以下几个步骤: 1. **安装Service Worker**: 首先,在项目中引入`@reach/router`库并配置SW,因为Service Worker需要注册一个fetch事件处理器。在项目的根目录下创建一个名为`sw.js`的服务 worker 文件,通常会包含注册和服务内容缓存的部分。 ```javascript // sw.js importScripts('https://www.gstatic.com/firebasejs/7.14.0/firebase-app.js'); importScripts('https://www.gstatic.com/firebasejs/7.14.0/firebase-storage.js'); const firebaseConfig = { // 这里填写你的Firebase配置 }; firebase.initializeApp(firebaseConfig); self.addEventListener('install', function(e) { e.waitUntil( caches.open('myAppCache').then(function(cache) { return cache.addAll([ './', './index.html', './service-worker.js', // 添加其他需要缓存的文件 ]); }) ); }); self.addEventListener('fetch', function(e) { e.respondWith( caches.match(e.request).then(response => { // 如果请求可以从缓存中得到,则返回响应 if (response) return response; // 否则尝试从网络获取 return fetch(e.request); }).catch(() => { // 返回自定义的离线页面或默认的404状态 return caches.match('/offline.html'); }) ); }); ``` 2. **启用PWA功能**:在`manifest.json`文件中,添加关键的元数据和设置,如图标、主题色等,并声明`start_url`作为用户启动应用的入口点。 ```json { "name": "My PWA", "short_name": "My App", "description": "A Progressive Web App built with React and Service Worker", "icons": [ { "src": "icon.png", "sizes": "192x192", "type": "image/png" }, ... // 更多尺寸的图标 ], "background_color": "#ffffff", "theme_color": "#000000", "display": "standalone", "start_url": "./index.html", "serviceworker": "sw.js" } ``` 3. **更新提示和离线支持**:使用`navigator.serviceWorker.register()`注册Service Worker,并监听`registration`事件处理更新提示。同时,可以检查网络连接并在无网时显示离线页面。 4. **预加载资源**:在React组件中,可以使用`react-pwa-preload-webpack-plugin`或`@pwa-helpers`之类的库预先加载重要的静态资源。 5. **优化用户体验**:通过`prefetch`, `preload`, 和 `cacheableResponse` API 提前下载部分数据,提升页面加载速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值