【发布时间】:2019-07-26 21:39:43
【问题描述】:
背景
我是服务人员的新手,但正在研究旨在成为“离线优先”(实际上,几乎是“仅离线”)的library(FWIW,目的是让图书馆的消费者能够提供表示表格多线性文本的 JSON 配置,并获得一个应用程序,该应用程序允许用户按段落/诗句范围以高度可定制的方式浏览这些文本。)
其他项目是将库作为依赖项安装,然后通过我们的 JavaScript API 提供信息,例如 JSON 配置文件的路径,指示我们的应用将使用哪些文件为它们生成(离线)应用。
虽然我知道我们可以做以下任何事情:
- 要求用户提供硬编码路径,我们的 Service Worker 的
install脚本可以使用waitUntil和它自己的 JSON 请求来检索用户的必要文件 - 跳过服务工作者的
installJSON 文件的服务工作者步骤,并依靠fetch事件来更新缓存,如果用户在获取可能发生之前完成安装并下线,则提供备用显示. - 将一些状态信息从我们的主脚本发布到服务器,一旦注册,Service Worker 将在完成其
install事件之前进行查询。
...但所有选择似乎都不理想,因为分别是:
- 我们图书馆的消费者可能更愿意为其 JSON 配置指定自己的位置。
- 鉴于 JSON 配置指定了对向用户展示任何有用信息至关重要的文件,我宁愿不允许安装完成,只是说用户必须重新联机才能获取其余文件(如果没有的话)能够在
install事件之后保持在线以查看所有必需的提取发生。 - 除了希望避免更多地访问服务器和额外的代码之外,我更希望我们的代码如此面向离线,以便能够完全在静态文件服务器上工作。
问题:
有没有办法在install 事件发生之前将消息或状态信息传递给服务工作者,无论是作为服务工作者 URL 的查询字符串的一部分,还是通过消息传递事件?从技术上讲,消息事件甚至可以在install 事件开始之后到达,只要它可以在install 中的waitUntil 完成之前发生。
我知道我可以自己对此进行测试,但我想知道当关键的应用程序文件必须像我们这样的库那样动态获取时,什么是最佳实践。
我猜indexedDB 可能是这里唯一的选择(即,将配置信息或 JSON 配置的路径保存到 indexedDB,注册服务工作者,并从 install 事件中检索 indexedDB 数据) ?即使这样也不理想,因为我让用户为他们的存储定义一个命名空间,但我也需要一种方法将它传递给工作人员,否则,源上的多个此类应用程序可能会发生冲突。
【问题讨论】:
-
TL,DR ;您是否尝试将您的逻辑放在
.waitUntil块中。 -
与问题无关,但感谢您的尝试。
-
@SaurabhTiwari :我发布了一条回复,显示
waitUntil可以用作消息传递解决方案的一部分,如果这就是你想要的。 -
正是我的意思..