我正在侦听服务工作者中的获取事件,并想知道何时对缓存的提取做出响应?
1)触发获取事件时? PreventDefault()来阻止它? 2)我是否需要缓存:在我的FETCH调用的INIT参数上没有存储? 3)它是否发生在event.respondWith()时间?
我有一种数据传送策略,旨在尽可能新鲜地传送数据,并且只有在网络速度缓慢时才进入缓存。但是,即使这样,网络提取也会一直运行,以便在完成后更新缓存。
如果没有像INIT这样的东西,“no-cache”不是我们面临FETCH的风险吗?
我(错误地?)假设缓存是选择加入的,我不得不用PUT()手动更新缓存。
答案 0 :(得分:3)
来自https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-lifetimes:
缓存实例不是浏览器的HTTP缓存
的一部分
不要将HTTP缓存与Cache API的缓存混淆。
HTTP缓存存在于服务工作者和网络之间,因此, 如果您希望浏览器不缓存(在HTTP缓存中)响应,则必须使用' no-store'获取资源时的选项。
其他缓存完全由您直接控制,因此如果您不在其中存储任何内容,则无法从中获取任何内容。
答案 1 :(得分:1)
Spec说这不应该发生: -
https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-lifetimes
5.2。了解缓存生存期
缓存实例不是浏览器的HTTP缓存的一部分。 Cache对象正是作者必须自己管理的对象。除非作者明确要求,否则不会更新Cache对象。除非作者删除条目,否则Cache对象不会过期。 Cache对象不会因为更新服务工作者脚本而消失。也就是说,缓存不会自动更新。必须手动管理更新。这意味着作者应该按名称对其缓存进行版本化,并确保仅使用可以安全操作的服务工作者版本的缓存。
答案 2 :(得分:-1)
fetchEvent.respondWith()是否实际返回到它下面的代码或执行隐式RETURN。
这是一个"答案"我相信它可以解释我在Chrome上看到的内容。