workbox - Workbox 预缓存策略
问题描述
从这里,我发现:
当用户稍后重新访问您的 Web 应用程序并且您有一个具有不同预缓存资产的新服务工作者时,workbox-precaching 将查看新列表并确定哪些资产是全新的......
为了确定新的 service worker 是否可用,您必须加载.js 包(比如说,使用 create-react-app 内置捆绑器创建),这意味着客户端必须加载 .js 包。 js 文件,以确保不存在新的 serviceWorker。
这意味着,缓存 .js 文件没有多大意义。我对么?
在此先感谢您的时间!
解决方案
每次导航到先前注册的 service worker 范围内的 URL 后,浏览器都会执行更新检查。这需要下载已注册的服务工作者脚本文件(绕过 HTTP 缓存,确保响应直接来自网络),并将服务工作者脚本文件的新副本与之前安装的副本进行比较。
如果之前安装的和新下载的 service worker 脚本文件的副本相同,则不会发生其他任何事情。当用户返回您的站点并且您没有部署任何新内容时,通常会发生这种情况。在这种情况下,唯一被传输的是服务工作者脚本文件。已添加到 service worker 缓存的各种资源不会再次下载。
如果之前安装的和新下载的 Service Worker 脚本副本之间存在差异,则启动 Service Worker 更新流程。在更新过程中,workbox-precaching
负责将位于新下载的服务工作者脚本中的预缓存清单与已经在缓存中的响应进行比较。如果已经缓存的响应有任何更新——或者是因为revision
与现有 URL 之一相关联的内容发生了变化,或者因为一个全新的 URL 被添加到最近的清单中——那么workbox-precaching
将为您获取并缓存这些清单条目。
推荐阅读
- google-chrome - 通过 Chrome 将网页固定到 Windows 任务栏时如何提供正确的图标
- node.js - 如何避免通过firebase实时数据库循环的嵌套promise
- wordpress - 我需要帮助生成基于用户 ID 的自定义 URL
- c# - 如何加速试图决定哪个节点去哪个节点列表的算法,使其最终在爬山算法中获得最佳分数
- laravel - QuickBooks API“无法打开所需文件”
- javascript - 如何在使用 html+javascript 和节点时显示警告框
- python-2.6 - 如何在 sqlalchemy 事件“after_update”中获取修改列或更新语句
- vector - PySpark:从组中的值创建一个向量
- javascript - 除了“标题”和“副标题”之外,如何自定义或向 FlatList、ListItem 添加更多字段
- c++ - Gmock 匹配器匹配类型