我有一个使用apollo作为grapql客户端的react应用。 该应用程序现在需要对子集/子应用程序的脱机支持。 有一个服务人员(由于工作箱和Webpack)对应用程序资产进行了预缓存,并且效果很好。 现在需要添加对数据的支持。 该应用程序需要像在线一样在离线模式下工作。这意味着用户应该能够查看所有数据并执行一些更改,当应用程序再次联机时,这些更改将需要同步回去。
我有以下几种可能的解决方法:
*使用服务人员:
添加一个按钮,该按钮触发一组查询以检索离线工作所需的所有数据。
使用服务工作者(工作箱runtimeCaching
)来缓存这些查询的所有响应。
当应用程序脱机时,服务人员将“提供”查询的响应,因此应用程序将“像其在线一样”工作,并以服务人员作为“代理”的方式正常执行查询。
为突变设置“乐观ui”方法,并使用workbox
backgroundSync同步更改(基本上是在浏览器再次联机时将突变操作发送回端点)。
*使用某些apollo本机方法(例如apollo-cache-persist)将查询缓存存储在localStorage中。如果应用程序不在线,则触发该应用程序的所有必需查询,保留该缓存,并从缓存中为该应用程序重新补充水分,以进一步加载。
对于离线网络应用程序,哪种方法更好,更简单?