Service Worker 更新延迟

2024-02-03

我有一个正在运行的 Web 应用程序,它依靠服务工作人员来检查所有缓存的文件并确保用户使用正确的应用程序版本。

我们的客户目前希望设备在特定点(重新打开应用程序时)等检查更新,因为目前当您打开应用程序时,设备最多可能需要 5 分钟才能意识到其版本已过时。

我是否可以强制设备检查服务工作人员是否有任何新更改,而不是等待应用程序检查我?

Thanks!


为了即时更新软件,您应该改进两个要点。

Shortly

  1. 致电您的sw.jsalso来自比应用程序索引页更常访问的页面。
  2. Utilize skipWaiting() https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/skipWaiting立即激活您的软件的方法。

详细

1) navigator.serviceWorker.register方法调用

您应该注意,较新版本的 SWITCH 只会由navigator.serviceWorker.register() https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register call.

并且通常register()方法将仅在您的页面之一中被调用。如果是这种情况,您应该将该命令添加到所有页面。因为如果用户只是打开另一个应用程序而不关闭您的 PWA,然后在 2 小时后返回到您的应用程序,他们将避开您所在应用程序的索引页面register()打电话大概是。

所以,我的建议是把它放在很多页上,如果不是每一页的话。缺点是客户会拨打更多电话sw.js。好处是客户将检索最新版本的软件而不会浪费时间。

2)激活Service Worker

服务人员的activate当 SW 不再有任何活动时,事件将被调用clients https://developer.mozilla.org/en-US/docs/Web/API/Clients。因此,只有在应用程序的每个实例(但一个关闭)之后才会激活新版本,并且刷新剩余选项卡/重新打开一个选项卡。看引用自MDN https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Updating_your_service_worker关于此事:

..新版本已在后台安装,但尚未激活。 仅当不再加载任何页面时才会激活它 仍在使用旧的 Service Worker。一旦没有了 这些页面仍然加载,新的服务工作者激活。

这个问题的解决方案是使用skipWaiting() https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/skipWaiting方法结合Clients.claim() https://developer.mozilla.org/en-US/docs/Web/API/Clients/claim

摘自 MDN 的使用示例。单击以在该页面上查看更多相关信息: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/skipWaiting#Example

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

Service Worker 更新延迟 的相关文章

  • 从 JavaScript 加载图像

    在我的专辑幻灯片放映页面上 我有类似的代码 span style display none img src imageUrl span span show loader span in showImage 我确定图像已加载 因此我显示图像并
  • 如何在 React JS 中根据键创建动态表?

    我正在尝试在 React JS 中创建一个动态表组件 该组件当前只有一个静态标头 其中包括最常见的结果键 有些结果还包含更多信息 例如电话号码 学位 如何根据键 值的存在动态地使用附加列扩展表 我应该与state并在存在时使其可见 或者我应
  • 为什么 Jshint 在此 if 语句中说“变量已定义”?

    我有这个代码 if something is true var someVar true else var someVar false JsHint 表示在 else 语句部分 someVar 已被定义 这是为什么 我该如何解决 Thank
  • Javascript“this”在 IE 中丢失上下文

    以下在 firefox safari chrome 中工作正常 在 IE 中 this 似乎在 handleEvent 函数中丢失上下文 警报的结果是 object Window 这不是我想要的 当从handleEvent 输出时 this
  • 如何使用标准 JavaScript 在 CSS 转换结束后立即重新启动它?

    我构建了一种密码生成器 只要倒计时到期 它就会显示新密码 不幸的是 我只设法弄清楚如何运行我的代码一次 倒计时由一个简单的 CSS 过渡组成 我想保留它 因为它比我的其他尝试平滑得多 其中我尝试使用 JavaScript 重复更新宽度 va
  • 获取 CRM 2011 中功能区按钮的 ID

    我创建了一个 JavaScript 我想在其中隐藏功能区Reactivate Lead按钮取决于某些条件 我通过在表单上按 F12 获得了按钮的 ID 即lead NoRelationship Form Mscrm Form lead Re
  • Mongoose 查询执行后回调函数从未被调用

    以下是我的代码 mongoose connect mongodb localhost mydatabase var db mongoose connection db on error console error bind console
  • 多次训练brain.js?

    在第一次训练后 如何将新信息 仅新信息 而不是所有信息 因为这会花费太多性能 训练到我的用 Brain js 制作的神经网络 它有点粗糙 但您可以使用以下结构来实现 如果我们加入 2 个训练数据集 旧数据集与新数据集 然后重新训练keepN
  • CSS 内边框?

    我纯粹用 CSS 创建了左侧的按钮 它是一个div 中的一个div 然而 右侧的三个按钮是background属性于img标签 我这样做是为了按照以下说明模拟翻转效果here http kyleschaeffer com best prac
  • 在 Cordova 中合并文件的多个部分

    在我的 Cordova 应用程序中 我正在下载任意文件 例如图像或视频文件 这是通过 Cordova 文件传输插件和 Range 标头完成的 因为我需要分段下载文件 我的问题是 我想将几 个小 字节 文件合并回原来的文件中 他们曾经在其中使
  • JavaScript 可以检测用户的浏览器是否支持 gzip 吗?

    我可以使用 JavaScript 来检测用户的浏览器是否支持 gzip 压缩内容 客户端 而不是 Node js 或类似内容 我正在尝试支持以下边缘情况 有很多可能的文件可以加载到特定的 Web 应用程序上 最好在应用程序运行时根据需要加载
  • 有没有办法在 React 中自动播放音频而不使用 onClick 事件?

    我在尝试在 componentDidMount 中播放音频时收到此错误 未捕获 承诺中 DOMException play 失败 因为用户没有先与文档交互 componentDidMount document getElementById
  • 纯 JS 相当于 Jquery eq()

    jquery 的纯等价物是什么eq 例如 我怎样才能实现 class1 class2 eq 0 text 1254 在纯 JavaScript 中 要获取数组中的元素索引 可以使用 在 JavaScript 中 因此 要重现您的代码 您可以
  • 在 Chrome 开发者工具中禁用调试器语句

    我正在尝试对恶意 JavaScript 进行逆向工程 当我最初加载侧面时 会注入 JS 代码 其中包括 debugger 语句并将断点注入我的 chrome 开发人员控制台 通过stackoverflow阅读 禁用所有断点does not帮
  • ES6 静态方法引用 self? [复制]

    这个问题在这里已经有答案了 我有两节课 存储库和用户存储库 我想在 Repository 中定义一个静态方法 该方法在运行时调用 UserRepository 中的静态函数 有什么干净的方法可以做到这一点吗 class Repository
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • 如何使用 fetch() 和 WhatWG 流获取文件上传进度

    注意 我并不是在寻找任何替代方案 我知道这可以通过 XMLHttpRequest 来完成 我也不关心浏览器支持 我只想了解新的 即将推出的标准 我有一个File https developer mozilla org en US docs
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引
  • 使用
    元素作为 JavaScript 代码的输入。这是最好的方法吗?

    各位 显然 我是编码新手 所以最近完成了一些有关 HTML 和 Javascript 的 Lynda 课程后 我的简单 HTML 页面遇到了困难 基本上 我想要的是使用 JavaScript 进行基本计算 让用户使用 HTML 输入两个数字

随机推荐

  • JAX-RS 是构建在 Servlet API 之上的吗?如何?

    我一直在读到 JAX RS 是构建在 servlet 之上的 这是字面意思吗 还是仅仅意味着它是一个更高级别的组件 如果是的话 它是如何运作的 JAX RS 是否创建一个解析请求并手动初始化的 servlet Path带注释的类并将修改后的
  • 从包中导出所有隐藏函数

    有没有一种方法可以自动从包中导入所有隐藏函数 即只能通过以下方式访问的函数package fun 事实上 我对给定函数进行了一些修改 该函数使用了相当多的内部函数 我想避免重新输入package 到处 我在看loadNamespace基本函
  • 使用 LibGDX 的法线贴图 GLSL

    我尝试使用 LibGDX 实现法线贴图 因此 当我在顶点着色器中计算漫反射和镜面反射颜色时 我得到了一些积极的结果 至少我这么认为 顶点着色器 attribute vec4 a position attribute vec2 a texCo
  • CONNECTIVITY_CHANGE 在 Android N 的目标中已弃用 [重复]

    这个问题在这里已经有答案了 我收到关于广播接收器已弃用声明的警告
  • 无法使用 PostgreSQL 配置 AspNet.Identity

    我有一个使用 SQL Server 设置的 Web 项目 现在必须将其迁移到 PostgreSQL 我使用实体框架版本 6 0 和最新版本的 Microsoft AspNet Identity 来管理用户凭据 我正在使用 VS2015 和
  • 如何调用使用 NSClassFromString 动态创建的类中的方法?

    我进行动态类加载的原因是因为我正在创建一组可在多个类似项目中使用的文件 因此执行 import 然后正常实例化是行不通的 动态类允许我执行此操作 只要我可以调用这些类中的方法即可 每个项目在 pch 中都有一个不同的 kMediaClass
  • 为什么应用程序池会自动停止? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在使用 IIS 7 0 对我的 MVC 互联网应用程序进行性能测试 有时应用程序池会停止 并且我在浏览器中收到一条错
  • 如何验证 KeyUsage 证书

    我正在尝试验证证书以确保它具有正确的 keyUsage 但不明白如何将我的 X509KeyUsageFlags KeyEncypherment 使用标志指定到此应用程序策略中 这是我到目前为止的代码 还有其他人让这个工作吗 X509Cert
  • 有没有像 Firefox 一样可以保存网站的 Python 脚本?

    当我想保存一些网站时 我厌倦了在 Firefox 中单击 文件 然后单击 页面另存为 Python 有没有脚本可以做到这一点 我想保存图片和css文件 这样当我离线阅读时 它看起来很正常 你可以使用 wget wget m k E 网址 E
  • 如何在 Delphi TStringList 中更快地搜索名称/值对?

    我通过将运行时的所有字符串放入 TStringList 中 在应用程序中实现了语言翻译 procedure PopulateStringList begin EnglishStringList Append CAN T FIND FILE
  • HTTP 失败:java.net.SocketException:套接字关闭改造

    尝试了多种方法仍然面临这个问题 我正在使用 RxJava 和 Retrofit 来完成所有网络操作 下面是我的代码 服务 kt GET v1 contact id fun getContactDetails Path id id Strin
  • upnpx 库的 Apple Mach-O 链接器错误

    我在使用 upnpx 库时遇到一个小问题 我已经下载了该库并打开了 upnpdemo 工作区 我在同一工作区中创建了一个新项目 尝试使用该库创建一个简单的应用程序 我像演示项目一样设置参数 但是 XCode 返回 21 个错误 Apple
  • WPF:列表框取消选择

    当用户单击我的单选中的某个项目时ListBox 该项目被选中 当用户第二次单击某个项目时 除非按住 Ctrl 键 否则不会取消选择该项目 建议将 2 更改为不需要控制键的方法是什么 确保选择模式为Multiple 通过选择多个 您只需单击鼠
  • 使用 _FILES 无法将文件发送到 PHP 服务器

    我正在尝试将值发送到 PHP 服务器 但总是收到 HTTP REsponse 200 并且在我的服务器中我没有收到我发送的值 不知道问题是什么 以下是我的 android 和 PHP 代码片段 有人可以帮忙吗我用这个 抱歉代码太多 我也遵循
  • 如何在Asp.Net Mvc4中检查验证码后传递Email Id值?

    我是使用实体框架的 Asp Net Mvc4 的新手 现在我正在为忘记密码进行验证码验证 作为我的代码 当我单击提交按钮时 即使验证码无效 它也会将电子邮件 ID 值传递给控制器 如果验证码正确 我想将电子邮件 ID 值传递给控制器 否则它
  • ASP.NET 无法编译调试

    我有两台 IIS 服务器计算机 A 和 B 它们都为相同的 ASP NET Web 窗体站点提供服务 在 A 上 当我遇到错误时 我会收到详细的错误页面 其中显示生成异常的源代码 在 B 上 当我遇到错误时 我收到消息 The source
  • rspec:第一次失败后如何继续测试

    我正在使用 rspec 来系统测试设备 该设备是模块化的 因此可以将任意数量的子设备连接到测试装置 我想在很多地方编写测试 这些测试将循环连接的子设备并在每个设备上运行相同的测试 基本上 这就是我想要做的 before all tool d
  • 我应该在退出子程序之前重新打开 .CutCopyMode 吗?

    为了优化我的代码 我关闭了几个应用程序对象成员 https msdn microsoft com en us library office ff198091 aspx特性 尤其是 CutCopyMode 属性 https msdn micr
  • TypeError:使用 ReactNative 传递参数时 this.props.navigation.getParam 不是函数

    我在通过 getParam 方法访问参数时遇到错误 如下所示 const source this props navigation getParam source 0 const doFollow this props navigation
  • Service Worker 更新延迟

    我有一个正在运行的 Web 应用程序 它依靠服务工作人员来检查所有缓存的文件并确保用户使用正确的应用程序版本 我们的客户目前希望设备在特定点 重新打开应用程序时 等检查更新 因为目前当您打开应用程序时 设备最多可能需要 5 分钟才能意识到其