如何缓存bust sw-toolbox?

2023-11-27

我一直在玩弄服务人员和 sw-toolbox。两者都是很好的方法,但似乎都有其弱点。

我的项目开始时使用 Google 的 Service Worker 方法(link)。我的看法是,您必须手动更新缓存清除的版本号。我也可能是错的,但我不认为用户访问过的页面不会被缓存。

与sw-toolbox方法相比,我需要添加的只是以下代码:

self.toolbox.router.default = self.toolbox.networkFirst;

self.toolbox.router.get('/(.*)', function (req, vals, opts) {
    return self.toolbox.networkFirst(req, vals, opts)
        .catch(function (error) {
            if (req.method === 'GET' && req.headers.get('accept').includes('text/html')) {
                return self.toolbox.cacheOnly(new Request(OFFLINE_URL), vals, opts);
            }
            throw error;
        });
});

那么缓存页面的问题就解决了。这是我的问题:将 sw-toolbox 应用到我的项目后,旧的 Service Worker 不会被清除或被新的 Service Worker 替换,除非我转到开发工具来清除它。

有什么想法可以解决这个问题吗?


这是我的问题:将 sw-toolbox 应用到我的项目后,旧的 服务人员不会被清除或被新的人员取代,除非我 去开发工具清除它。

每次请求 Service Worker 范围内的资源时,浏览器都会检查 Service Worker 文件的更新。如果 Service Worker 文件中存在字节差异,浏览器将安装新的 Service Worker。您只需要在开发工具中手动更新 Service Worker,因为应用程序仍在运行,并且浏览器不希望在旧 Service Worker 仍在使用时激活新 Service Worker。

如果您关闭与 Service Worker 关联的所有页面(就像用户离开应用程序时所做的那样),浏览器将能够在下次打开页面时激活新的 Service Worker。

如果你想强制新的 Service Worker 接管,你可以添加self.skipWaiting(); to the install event. 这是一些带有示例的文档.

您可以从中了解有关 Service Worker 生命周期的所有信息杰克·阿奇博尔德的这篇文章.

就缓存和缓存管理而言,像 sw-toolbox 这样的工具将为您处理缓存清除。事实上,Workbox是一个新工具,旨在取代 sw-toolbox 和 sw-precache。它还将处理缓存清除和缓存管理(通过比较文件哈希和设置/跟踪资源到期日期)。

一般来说,您应该始终使用类似的工具Workbox编写您的服务人员。手工编写它们很容易出错,并且您可能会错过极端情况。

希望有帮助。

附:如果你最终没有使用skipWaiting并且仅在用户关闭并重新打开页面时更新,您仍然可以启用自动更新以进行开发。在 Chrome 的开发工具中,应用 > Service Worker has an 重新加载时更新自动更新 Service Worker 的选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何缓存bust sw-toolbox? 的相关文章

随机推荐

  • 如何让 IntelliJ IDEA 理解我的空检查方法?

    我有一个方法 其中参数标记为 Nonnull注解 调用该方法的代码必须检查该值是否为空 而不仅仅是直x null检查 它正在调用另一个类上的实用方法 在实际代码中 实用程序方法还会检查它是否为空字符串 我的问题是 Intellij Idea
  • 获取QTreeView中当前选定的项目

    我在 QTreeView 中有很多项目 每个项目都是使用此类生成的 class Branch QStandardItem def init self label uri None QStandardItem init self label
  • python 本地模块

    我有几个项目目录 并且想要特定于它们的库 模块 例如 我可能有这样的目录结构 myproject mymodules init py myfunctions py myreports mycode py 假设有一个函数叫做add in my
  • 如何使用 XmlPullParser 解析 RSS 提要?

    我想解析 RSS 提要 我的问题是如何解析之间的所有标签
  • Python中跨平台获取用户配置主目录的方法?

    我的程序需要存储一些配置文件 主要操作系统似乎都有一个指定的位置来放置它们 例如 在 Freedesktop org 兼容系统上 它将是存储在 XDG CONFIG HOME环境变量 是否有方法 或库 可以跨主要操作系统获取此配置主目录 W
  • 如何从 int 正确设置 UIColor?

    我正在尝试设置textColor of a UITextView通过给它赋值 在该计划的早期我有 textView textColor 0x000000 但后来 当我有 textView textColor 0x888888 弹出致命错误
  • Springboot 日志配置

    我尝试配置我的 springboot 应用程序以登录一个文件一天 所以我配置我的 logback xml 就像这样
  • jquery 更改在动态值更改的情况下不起作用

    在 jQuery 中我如何跟踪onchange如果文本框的值因其他事件而动态变化 则发生事件 我尝试过这个但它不起作用 txtbox change function alert change keyup不涵盖所有自然情况 两种情况当chan
  • “adb screencap /sdcard/screenshot.raw”生成什么格式? (没有“-p”标志)

    我正在寻找使用adb screencap实用程序没有 p旗帜 我想象输出将以原始格式转储 但看起来并非如此 我尝试打开原始图像文件Pillow python 库导致 adb pull sdcard screenshot raw screen
  • 页面加载时将光标更改为忙

    我了解如何在页面进行和 ajax 调用时使用 javascript 将光标更改为忙 但是我有一个不使用ajax的页面 它使用回发来重新加载页面 然而 加载的数据量相当大 并且需要几秒钟的时间 在此期间用户仍然可以点击该页面 我想将光标转到
  • `script` 和 `link as="script"` 标签有什么区别?

    除了加载脚本的标准方法之外 我见过人们这样做 有什么区别吗 注 还有一个类似的使用 link 和 script 标签引用 JavaScript 源代码有什么区别 问题询问关于 这是不同的 If that link标签有rel preload
  • 如何禁用谷歌浏览器自动更新? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有谁知道如何禁用 Google Chrome 自动更新本身 它会导致我的网络应用程序总是发生变化 我已尝试使用此页面上提供的或如中所述的 Google Update ADM 模板这篇
  • 将MaterialToolbar的标题更改为center

    我正在使用导航组件和材质工具栏 我刚刚使用材质工具栏设置了导航组件 通过这样做 每当片段更改显示的后退按钮时 导航组件就会自动更改材质工具栏的标题 问题是我只想将标题重力更改为中心而不删除那些导航组件工具栏支持 我怎样才能做到这一点 注意
  • 如何配置 rspec 以使用 spork 显示输出?

    我运行了 spork 来加速我的测试 但是当我运行它们时没有输出 是否有我需要修改的配置 刚刚也遇到了这个问题 在 spork 1 0 0rc4 和 rspec 2 14 1 rspec core 2 14 8 上运行 据我所知 问题在于以
  • 时间戳和日期时间

    我有一个包含两列的表 第一列是 当前日期 时间戳 另一列是 日期返回 日期时间列 我需要从天数中获取当前日期和日期返回之间的差异 这可能吗 不 这是不可能的 与流行的看法 以及名称本身 相反 timestamp column 实际上与时间无
  • “当前不会命中断点” - 我无法添加 .pdb 文件

    我在 Visual Studio 中有一个包含一个项目的解决方案2013 视觉C 但是当我构建它时debug模式 那么运行它debug我得到的模式 当前不会命中断点 尚未加载任何符号 对于本文档 我试图以类似于人们建议的 Visual C
  • Linux:有没有办法在不停止/暂停进程(SIGSTOP)的情况下使用 ptrace?

    我正在尝试将程序从 Windows 移植到 Linux 当我发现没有 真实 的时候 我遇到了一个问题ReadProcessMemoryLinux 上的对应项 我寻找替代方案 然后发现ptrace 一个强大的进程调试器 我快速用 C 编写了两
  • 在双精度和字节数组之间进行转换,以便通过 ZigBee API 传输?

    我正在尝试获取两个双精度数 GPS 坐标 并通过 ZigBee API 将它们发送到另一个 ZigBee 接收器单元 但我不知道如何将双精度数分解为字节数组 然后将它们重新组合回原始形式一旦他们被转移 基本上 我需要将每个双精度数转换为八个
  • 使用 PageView 时的 FadeTransition

    我试图做一些应该很简单的事情 但事实证明这非常困难 当用户滚动到 flutter web 上的下一页时 我试图进行淡入淡出过渡 我尝试使用在 stackoverflow 上找到的许多代码 但没有任何效果 我最后尝试的是以下代码 它给了我一个
  • 如何缓存bust sw-toolbox?

    我一直在玩弄服务人员和 sw toolbox 两者都是很好的方法 但似乎都有其弱点 我的项目开始时使用 Google 的 Service Worker 方法 link 我的看法是 您必须手动更新缓存清除的版本号 我也可能是错的 但我不认为用