当前位置: 首页 > news >正文

在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别

在 Service Worker 中,caches.put(request, response) 和 caches.add(request)/caches.addAll(requests) 方法都用于将资源添加到缓存中,但它们的使用场景和目的略有不同。

caches.put(request, response),一用在fetch事件当中,由网络请求成功后将资源添加到缓存当中

用途:caches.put 方法用于将一个请求(request)和对应的响应(response)作为一个键值对添加到缓存中。这个方法通常在 fetch 事件中使用,用于在网络请求成功后将资源添加到缓存。

手动添加:是的,caches.put 是手动添加资源到缓存的一种方式。它允许你在捕获到网络请求并从网络获取资源后,将这些资源存储到缓存中,以便后续的请求可以直接从缓存中获取。

// 这里便是网络请求,或当网络请求优先时,便用cache.put()手动将网络获取资源添加到缓存中

// 监听 fetch 事件
self.addEventListener('fetch', (event) => {// 使用 event.respondWith() 来拦截请求并提供响应event.respondWith(// 使用 fetch() 从网络获取资源fetch(event.request).then((response) => {// 检查响应是否成功if (response.status === 200) {// 打开缓存return caches.open('my-cache').then((cache) => {// 将请求和响应克隆一份,因为 response 流只能被消费一次const responseToCache = response.clone();// 将请求和响应添加到缓存中cache.put(event.request, responseToCache);// 返回原始响应return response;});} else {// 如果响应不是200,则直接返回响应return response;}}).catch((error) => {// 如果 fetch 失败,则尝试从缓存中获取资源return caches.match(event.request).then((cachedResponse) => {if (cachedResponse) {return cachedResponse;} else {// 如果缓存中没有资源,抛出错误throw error;}});}));
});

这段代码的工作流程如下:

1、监听 fetch 事件:当页面发起网络请求时,Service Worker 会捕获这个请求。
2、从网络获取资源:使用 fetch() 尝试从网络获取资源。
3、检查响应状态:如果响应状态码为 200(即请求成功),则继续处理。
4、打开缓存:使用 caches.open() 打开一个名为 ‘my-cache’ 的缓存。
5、克隆响应:由于 Response 对象的流只能被消费一次,所以需要克隆一份响应,以便同时将其添加到缓存和返回给页面。
6、将资源添加到缓存:使用 cache.put() 将请求和克隆的响应添加到缓存中。
7、返回响应:返回原始的响应给页面。
8、错误处理:如果 fetch() 失败,尝试从缓存中获取资源。如果缓存中没有相应的资源,则抛出错误。

这样,你就可以在 Service Worker 中从后台请求资源,并将其添加到缓存中,以便在离线或网络不佳的情况下使用。

caches.add(request) / caches.addAll(requests),一般使用在install事件当中预先缓存资源

用途:caches.add 和 caches.addAll 方法用于将一个或多个资源添加到缓存中。caches.add 用于添加单个资源,而 caches.addAll 用于批量添加资源。这些方法通常在 install 事件中使用,用于在 Service Worker 安装时预先缓存资源。

预先缓存:这些方法用于在 Service Worker 安装时预先缓存资源,这样在页面加载时可以直接从缓存中获取这些资源,而不需要等待网络请求。

self.addEventListener('install', (event) => {event.waitUntil(caches.open('my-cache').then((cache) => {return cache.addAll(['/images/image1.jpg','/images/image2.jpg',// 其他资源...]);}));
});

总结:

caches.put(request, response) 通常在 fetch 事件中使用,用于在网络请求成功后将资源添加到缓存。
caches.add(request) 和 caches.addAll(requests) 通常在 install 事件中使用,用于在 Service Worker 安装时预先缓存资源。
这两种方法都是将资源添加到缓存的有效方式,选择哪种方法取决于你的具体需求和缓存策略。


http://www.mrgr.cn/news/71974.html

相关文章:

  • LeetCode【0028】找出字符串中第一个匹配项的下标
  • 骨传导耳机哪家好?这五大热门高口碑骨传导耳机别错过!
  • PICO+Unity MR空间锚点
  • 游戏引擎学习第五天
  • PHP:通往动态Web开发世界的桥梁
  • 【C++ 算法进阶】算法提升十三
  • 【知识科普】ARM架构和x86架构
  • CustomersettleController
  • 大循环引起CPU负载过高
  • Android命令行启动SoftAP功能
  • golang项目三层依赖架构,自底向上;依赖注入trpc\grpc
  • 51c视觉~合集6
  • 【含文档】基于ssm+jsp的在线网课管理系统(含源码+数据库+lw)
  • 音视频入门基础:MPEG2-TS专题(3)——TS Header简介
  • 解剖C++模板(2) —— 模板匹配规则及特化
  • 面向对象试题答案
  • 【Python爬虫实战】轻量级爬虫利器:DrissionPage之SessionPage与WebPage模块详解
  • 斯坦福泡茶机器人DexCap源码解析:涵盖收集数据、处理数据、模型训练三大阶段
  • MATLAB基础应用精讲-【数模应用】Google Caffeine算法
  • Linux设置socks代理
  • Mapwindow5代码BUG记录1
  • AI与育儿领域的融合——探索未来的可能性
  • 计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习
  • mpeg ps媒体流文件解析工具
  • 羲和数据集收集器1.4
  • PyQt入门指南五十五 持续集成与部署