当前位置: 首页 > 知识库问答 >
问题:

停止服务工作者获取事件缓存特定文件

岳茂
2023-03-14

我正在侦听服务工作者中的获取事件,想知道何时缓存对获取的响应?

1)当Fetch事件被触发时?PreventDefault()停止它?2)我是否需要缓存:无存储在我的INIT参数到我的FETCH调用?3)它发生在event.respondwith()时间吗?

我有一个数据交付策略,寻求交付尽可能新鲜的数据,只有在网络很慢的情况下才去缓存。但即使如此,只要缓存完成,网络抓取仍然运行以更新缓存。

如果没有像INIT这样的“无缓存”,我们难道不会面临FETCH只是读取缓存的风险吗?

我(错了?)假设缓存是opt-in,我必须使用PUT()手动更新缓存。

共有3个答案

终祯
2023-03-14

不抓取事件。respondWith()实际返回到它下面的代码,或者执行并隐式返回。

这是一个“答案”,因为我相信它可以解释我在Chrome上看到的东西。

山疏珂
2023-03-14

规范说这不应该发生:-

https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-lifetimes

5.2. 了解缓存生存期

缓存实例不是浏览器HTTP缓存的一部分。缓存对象正是作者必须自己管理的对象。除非作者明确要求更新缓存对象,否则不会更新缓存对象。除非作者删除条目,否则缓存对象不会过期。缓存对象不会因为服务工作者脚本更新而消失。也就是说,缓存不会自动更新。必须手动管理更新。这意味着作者应按名称对其缓存进行版本设置,并确保仅使用可以安全操作的服务工作者版本的缓存。

赵锐
2023-03-14

从https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-lifetimes:

缓存实例不是浏览器HTTP缓存的一部分

不要将HTTP缓存与缓存API的缓存混淆。

HTTP缓存位于服务工作者和网络之间,因此,如果希望浏览器不缓存(在HTTP缓存中)响应,则在获取资源时必须使用“no store”选项。

相反,其他缓存完全由您直接控制,因此如果您不在其中存储任何内容,则无法从中获取任何内容。

 类似资料:
  • 我注意到,当服务工作人员脚本本身加载到浏览器中时,不再触发服务工作人员的读取事件。例如,当我们有一个新版本的服务辅助角色时,旧的服务辅助角色读取事件不会被触发。因此,旧的服务工作者不能再检查新服务工作者的内容。 我确信这以前是可能的,我想知道这是否是一个bug,或者是否对此进行了任何更改。我在官方存储库或W3C草稿中没有找到与此更改相关的任何内容。 为了验证fetch事件没有被触发,我用版本号(参

  • 我正在使用Service Worker创建一个渐进式Web应用程序,我正在使用Service Worker工具箱来缓存我的内容。Service Worker代码来缓存我的内容: 代码运行正常,因为我在控制台上没有看到任何错误。但是我如何检查是否从云前或上面配置的网址的图像正在缓存和从缓存本身渲染。

  • 我目前正在使用default-service-worker开发一个渐进式web应用程序。 我在发布一个新版本的javascript块时遇到了破坏缓存的问题。 构建时,输出javascript文件使用来确保当JS文件中的内容发生变化时,文件名也会发生变化。在没有服务工作程序的情况下运行时,这会成功地关闭缓存。 但是,当使用service worker时,所有静态资产包括我的文件被缓存。这意味着旧的正

  • 我在列出索引时遇到问题。my service worker获取事件中的html文档。因此,如果我打开一个新选项卡并转到我的开发服务器,我会在ServiceWorkerFetchEventListener中看到作为请求URL列出的文档。 这是输出 好的,一切按计划进行。但是当我刷新页面时,我看不到根请求或“/”作为索引。html。 我正在做什么。我已经在服务器上添加了一个中间件,以确保浏览器不会缓存

  • 所以我尝试在我的angular web应用程序中使用service worker来显示自定义脱机页面,遇到的问题是 但是如果我把服务人员放进去。js文件在assets文件夹中它按预期工作,但由于服务在assets文件夹中,因此无法启动获取 我的问题是,如果我有我的文件在角根文件夹如何导入/给出正确的路径。 应用程序。组成部分ts 我的服务人员文件在下图中的位置 我是新的角,所以任何指导将是有帮助的

  • 如何获取由服务人员的“获取”事件提供服务的页面的完整URL? "self.location"属性似乎只引用站点的根URL。例如,如果页https://example.com/folder/pagename.html正在执行服务工作人员正在拦截的读取,则服务工作人员的self.location属性返回https://example.com。 事件当前目标。地点和活动。明确目标。地点、事件。原始目标和