- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
默认 skipWaiting
在 Workbox 中设置为 false。假设您仅使用 Workbox 创建的 service worker 进行缓存,将其设置为 true 有什么缺点吗?如果不这样做,您的应用程序的下一个构建版本将发送更新的资源 URL(来自 webpack)。这些 url 将在 Service Worker 的预缓存 list 中更新,但没有 skipWaiting
,更新后的 Service Worker 不会被激活以利用它们,直到用户关闭浏览器并重新打开。
这些更新的资源将被正确加载(webpack 将加载包含新哈希值的资源),但它们永远不会被缓存,直到用户再次关闭所有运行 service worker 的打开浏览器,然后重新打开。在这种情况下,有什么理由不只是设置 skipWaiting
对吗?
作为一个相关问题,clientsClaim
究竟是做什么的?控制?只需打开skipWaiting就可以解决上述问题;那么clientsClaim有什么作用呢?
最佳答案
作为背景,我建议阅读“The Service Worker Lifecycle”。它是从通用 Service Worker 的角度编写的,但这些要点也适用于 Workbox 驱动的 Service Worker。
这些概念也从使用 create-react-app
的角度进行了更详细的解释。 ,在这个“Paying Attention while Loading Lazily”谈话和微型网站。
Workbox 的实现
Workbox 使用 install
事件处理程序在预缓存 list 中缓存新的或更新的条目(在需要时将 __WB_REVISION__
查询参数附加到条目的 URL,以避免覆盖具有不同修订版本的现有条目),并且它使用 activate
事件处理程序删除不再在预缓存 list 中列出的以前缓存的条目。
如 skipWaiting
为真,则 activate
处理程序负责从缓存中清除过时的 URL,将在安装更新的 Service Worker 后立即执行。
Under these circumstances, is there any reason to not just set
skipWaiting
to true?
skipWaiting
,并且为了安全起见,我们默认在 Workbox 中禁用它。 (它在较旧的
sw-precache
生成的服务 worker 中默认启用。)
/view-one.abcd1234.js
需要加载才能渲染
/view-one
.但与此同时,您已经为您的代码部署了更新,并且
/view-one.abcd1234.js
已在您的服务器和预缓存 list 中替换为
/view-one.7890abcd.js
.
skipWaiting
为真,则
/view-one.abcd1234.js
将作为
activate
的一部分从缓存中清除事件。作为部署的一部分,您可能已经从服务器中清除了它。因此该请求将失败。
skipWaiting
为假,则
/view-one.abcd1234.js
将继续在您的缓存中可用,直到 Service Worker 的所有打开客户端都已关闭。这通常是你想要的。
skipWaiting
反正。
/view-one.js
的版本。这与从缓存中获取的 HTML 的结构不符。
skipWaiting
是假的,那么这不太可能发生,因为
/view-one.js
从缓存加载的应该对应于从同一缓存加载的 HTML 结构。这就是为什么它是一个更安全的默认值。
so what does clientsClaim do?
clientsClaim
确保在服务 worker 激活后,该服务 worker 将立即控制范围内的所有不受控制的客户端(即页面)。如果您不启用它,那么在下一次导航之前它们将不会受到控制。
skipWaiting
更安全,如果您希望 Service Worker 尽早开始填充运行时缓存,这会很有帮助。
关于service-worker - 在 Workbox 中使用 skipWaiting 和 clientsClaim 有什么缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51715127/
我正在使用 choronos,它建议使用 start/stop 命令开始停止,如下所示 开始计时 停止计时 但是,我正在编写 puppet manifest,它只适用于下面的服务命令。 服务计时开始
来历及作用 services.exe进程程序文件是由微软公司为其发布的Windows操作系统定义的一个系统进程,常见于Windows 2000/XP/Vista/2007等系统中,被描述为服务和控
我一直在尝试使用installutil:installutil /u GSIS.FileMoverService.exe安装Windows服务。 我得到的输出是: Uninstalling assem
如果一个域有多个团队和多个 Web 应用程序,那么注册 Service Worker 来管理整个站点的最佳建议是什么?具有范围的顶级服务 worker /或子域中的多个服务 worker ?由于一个域
我已经在 eclipse 中创建了企业项目。动态web项目和ejb项目对企业项目有借鉴意义。当我运行管理员(企业项目)运行时选择 wildfly 服务器 18。我收到以下错误。谁能告诉我我错过了什么。
我已经使用 apache-cxf-2.7.4 创建了一个 Web 服务。我进入了我的项目中制作的类(class)。我的项目中的库是: math3-commons-3.2.jar XStream-1.4
我在域中的 Virtual Box 中运行集群计算机,默认情况下服务在 Network 服务下运行,服务一直停止,事件日志中出现以下错误。 请从下面的错误日志中查找错误详细信息。任何帮助都会很棒。 L
在我的应用程序中,用户可以在 map 上发布事件。应用程序的入口点是一个无状态的 web api 服务。为了在内部代表用户,我想要一个用户服务。我应该何时使用 Reliable Stateful Ac
当我尝试运行在WIX中创建的安装程序时,出现以下错误消息: “服务'Report Generator Service'(报告生成器服务)无法启动。请验证您是否具有启动系统服务的足够特权”。 我已经在这
尝试使用 cloudformation 创建 ECS 服务(在 Fargate 上)但出现错误: Invalid service in ARN (Service: AmazonECS; Status
我正在编写一个简单的Windows服务,该服务每个月向所有员工发送一封电子邮件。我的问题是,完成后如何停止自我?我是该领域的新手,请帮帮我。非常感谢。 它将部署在服务器上以每月运行。我没有开始做这件事
有谁知道是否有办法在 service worker 中获取此号码或日期: 将我的服务 worker 缓存命名为 cache-1182 会很方便或 cache-20171127171448 我想在安装事
我想开始使用 Azure Service Fabric 技术。 我按照this document工作并安装最新的SDK。安装后,我打开 PowerShell(“以管理员身份运行”)命令行窗口并写入这些
我在使用 whenever gem 时遇到了一些问题。我创建了一个 rake 任务,当我自己启动它时它工作得很好但是当我在日志中收到以下消息时尝试自动执行它: ActiveRecord::Statem
我想在 service fabric 集群中为两个不同的 web 应用程序(webpi/website)共享 http/80 端口,应用程序必须有 2 个不同的主机名: mywebapi.com 和
我创建了一个使用 MongoDB 实现 hibernate OGM 的应用程序。它在 Eclipse 中运行得很好,但是,当我构建一个 fat jar 并尝试运行它时,出现以下错误: Exceptio
我有一个 Selenium Python 测试套件。它开始运行,但几分钟后抛出以下错误: Exception AttributeError: "'Service' object has no attr
我按照此链接的说明进行操作:https://www.thegeekdiary.com/centos-rhel-7-how-to-make-custom-script-to-run-automatica
我在 ubuntu 下的 jboss 上部署了简单的“HelloWorld”Web 服务。 我创建了简单的客户端,但我无法让它工作。每次运行客户端时,我都会收到 NullPointerExceptio
我正在尝试为我的网站使用后台定期同步。我正在使用 localhost 并在 1*1000 毫秒时注册 periodicsync 事件,但这根本不会触发。 我看过这个demo ,但即使我将该网站安装为应
我是一名优秀的程序员,十分优秀!