【发布时间】:2020-07-16 19:59:11
【问题描述】:
我有一个由 Firebase 支持的应用,其数据库结构如下:
posts
/uid
/postId
最初,我会使用ObserveEventOfType 和.childAdded 从posts/uid 节点加载数据。这会同时为我的应用程序的所有用户频繁加载陈旧数据(每天约 5 次)。当尝试通过发布新帖子来更新数据时,Firebase 仍会返回过时的数据。
因此,我决定尝试keepSynced。现在,如果我的参考看起来像这样:
reference = Database().database.reference.child("posts").child(uid)
keepSynced 将加载该节点上的所有数据,如果该节点中有很多子节点,这可能会导致下载量非常大。因此,我决定将引用/查询更改为:
reference = Database().database.reference.child("posts").child(uid).queryLimited(toLast: 25)
当为此节点打开keepSynced 时,它会成功同步节点中的最后 25 个子节点。但是,我仍然面临相当频繁地接收陈旧数据的问题。所以这是我的问题:
-
在受限查询中添加
keepSynced模式时,它是仅从您添加到的初始节点同步,还是始终只同步该节点下的 25 个最新子节点? 在代码中添加
keepSynced(true)行的最佳位置在哪里?在我们加载引用之前,在viewWillAppear中,还是在实际下载回调中?同样,在哪里使用
keepSynced(false)最好?当应用淡入后台时,
keepSynced监听器是否会被删除?为什么
keepSynced有时不处理子更新?
我目前在用于加载在viewDidLoad 上调用的帖子的函数内部使用keepSynced(true)。
提前致谢。
【问题讨论】:
标签: ios swift firebase caching firebase-realtime-database