Caching 过时而重新验证缓存策略意味着什么?

Caching 过时而重新验证缓存策略意味着什么?,caching,fetch,service-worker,service-worker-events,Caching,Fetch,Service Worker,Service Worker Events,我正在尝试使用ServiceWorker实现不同的缓存策略。对于以下战略,实施方式是完全明确的: 缓存优先 仅缓存 网络优先 仅网络 例如,在尝试实现cache first策略时,在服务工作者的fetch钩子中,我将首先向CacheStorage或任何其他请求URL,然后如果存在,则对其进行响应,如果不存在,则对网络请求的结果进行响应 但是根据工作箱的定义,对于过时的while重新验证策略,我有以下问题: 首先是机制本身。stale while revalidate是指在网络响应之前使用缓存,然

我正在尝试使用ServiceWorker实现不同的缓存策略。对于以下战略,实施方式是完全明确的:

缓存优先 仅缓存 网络优先 仅网络 例如,在尝试实现cache first策略时,在服务工作者的fetch钩子中,我将首先向CacheStorage或任何其他请求URL,然后如果存在,则对其进行响应,如果不存在,则对网络请求的结果进行响应

但是根据工作箱的定义,对于过时的while重新验证策略,我有以下问题:

首先是机制本身。stale while revalidate是指在网络响应之前使用缓存,然后使用网络数据,还是仅使用网络响应为下一次更新缓存数据? 现在,如果下次缓存网络,那么哪些场景包含该网络的实际用例? 如果应用程序中的网络响应应该立即被替换,那么如何在服务人员中完成呢?因为钩子将使用缓存数据解析,而网络数据无法使用respondWith解析。 是的,就是这个意思。想法很简单:从缓存中立即响应,然后在后台刷新缓存以备下次使用

在所有情况下,始终获取最新版本的页面/应用程序并不重要=我在两个不同的web应用程序上使用stale while重新验证策略,一个用于公共交通服务,另一个用于显示餐厅菜单信息。很多网站/应用程序都可以,但当然不是全部

在第2页这里需要注意一件非常重要的事情: 例如,您可以仅对静态资产使用过时而重新验证。通过这种方式,您的html、js、css、图像等将被缓存并快速提供给用户,但从API动态获取的数据可能仍然是新鲜的。对于某些应用程序来说,这是有效的,而对于其他一些应用程序则不太好。完全取决于应用程序。当然,如果用户运行的是以前版本的应用程序等,您必须记住不要更改API的语义

以任何自动方式都不可能。但是,您可以使用window.postMessage API在服务工作者和页面上的常规JS代码之间实现一个消息通道。您可以侦听页面上的某些消息,然后在发生重要更改且缓存已更新时,从服务人员发送消息。然后,您可以向用户显示一个提示,告诉用户现在确实需要重新加载页面,甚至可以强制从JS重新加载页面。当然,您需要将确定何时发生重要更新的逻辑放入服务工作者中。
谢谢你,帕特。回答得很好。我还想指出,通过这种方式,缓存策略将仅用于性能速度方面,而不是减少网络流量,因为每次缓存存在或不存在时都会发送重新验证请求。这会混淆b/c workbox的stale定义,而重新验证与浏览器的http缓存定义不同,但名称相同。浏览器仅在资源过时时重新验证。。这是有道理的。workbox重新验证每个请求。。?看起来很浪费。