php - 一个域的两个服务人员
问题描述
我有一个当前AppCache
用于离线存储的 Web 应用程序。我正在尝试将此应用程序转换为使用Service Workers
。我已经使用这个源作为我的基础Service Worker
,除了Service Worker
正在构建使用PHP
以便动态生成要缓存的文件数组。
问题是,用户点击的第一个页面是登录页面,而现阶段我们对用户一无所知,所以不知道要缓存哪些资源。我AppCache
通过两个清单解决了这个问题。该Login
页面的一个清单和所有其他页面使用的第二个清单。当我转换为 时Service Workers
,我有遵循相同模式的想法;有两个Service Workers
- 一个用于登录页面,一个用于所有其他页面。
应用程序文件夹结构如下:
-- 共享 -- 页面 -- 登录 -- 第 1 页 -- 第 2 页 -- 第 3 页
登录页面和各种页面都使用Shared
文件夹中的代码,因此两者的范围都Service Workers
必须是应用程序的根目录。这就是问题所在。我现在发现我只能Service Worker
在具有根范围的域上注册一个。Service Worker
我可以在Login
页面上注册第二个/Pages/Login
范围,但是这将无法访问共享资源。如果我Service Worker
对登录页面和其他页面都使用相同的内容,那么注册发生在登录页面上,并且生成的 url 列表不完整,因为它只包含登录使用的资源。
我很想知道是否有其他人处理过这个问题,并可以提出解决这个问题的可能方向。
解决方案
服务工作者可以访问fetch
其scope
. 这包括“更高”级别的 URL,例如您的/Shared
目录,或来自完全不同来源的 URL,例如 CDN。
该scope
限制确定给定的 service worker 是否可以控制给定 URL 处的网页。scope
Service Worker 只能控制 URL 以为前缀的网页。
因此,您可以创建多个服务工作人员,并使用匹配不同 URL 前缀的 s 注册每个服务工作人员,并且每个服务工作人员scope
都可以响应fetch
您的共享资源 URL 的事件。
在https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#scope_and_control有更多信息
推荐阅读
- angular - Karma/Jasmine angular spyOn 总是返回存根类的值
- unity3d - 如何在 Unity 中尽可能优化地检测与表面的碰撞?
- visual-studio-code - 使用 esbuild 包含或排除 node_modules
- git - 如何在 Git 中不进行任何更改的情况下取消暂存文件?
- bash - 如何在 if 语句中使用 wc -l 整数输出
- php - WordPress帖子上传时间问题
- javascript - 两个文本区域并排,最大尺寸填充整个覆盖网站,就像在崇高的文本编辑器中一样,有两列布局?
- java - 如果错误生成一次,Java while 循环会继续执行 catch 块中的代码
- android - 编辑填写的表格并使用 Ionic/Angular 重新提交
- linux - 收到 27 Profiling timer expired 信号;分析时间警报 gprof