【问题标题】:Should updates to Firstore items in AngularFire be done through the AngularFirestoreCollection?是否应该通过 AngularFirestoreCollection 更新 AngularFire 中的 Firstore 项目?
【发布时间】:2019-10-06 23:02:00
【问题描述】:

在我的应用程序中,我有一个需要“或”条件的列表。但是,作为docs say

在这种情况下,您应该为每个 OR 条件创建一个单独的查询,并将查询结果合并到您的应用中。

因此,在我的服务中,我管理着两个查询并将它们作为一个单一的可观察列表呈现给消费者。

问题在于更新。我可以选择做额外的工作来匹配需要更新到正确集合的项目,这样我就可以执行以下操作:

myCollection.doc(item.id).update(item);

或者我可以让这更简单,更简单:

angularFirestore.doc(`path/to/${item.id}`).update(item);

我假设第一种方法会导致更快的更新,因为我使用的是相同的参考,它会立即乐观地更新。并且后者会更慢,因为它会通过更新持久层来更圆润,然后集合引用会在稍后得到通知(可能仍然是一小段时间)。

然而,以上所有都是假设。我只是用一些随机实例来支持这一点,我发现更新或删除需要一两秒钟才能显示在视图的其他部分,但我无法实际检查该过程。

有谁知道以上是否正确?我应该做额外的工作来编写集合引用还是 angularfire(和/或 firestore)处理这个并让它们在引擎盖下有效地进行相同的操作?

【问题讨论】:

    标签: javascript angular performance google-cloud-firestore angularfire


    【解决方案1】:

    AngularFire2 是 RxFire 的精简包装器,它本身是 Firebase JavaScript SDK 的相对精简的包装器。

    通过 AngularFire 更新文档或直接通过 JavaScript SDK 更新文档之间应该没有显着的性能差异。在这两种情况下,大部分时间都花在 JavaScript SDK 以及客户端和服务器之间的线路上。出于这个原因,我通常直接通过 JavaScript SDK 进行更新,因为它通常更直接,而 AngularFire 抽象在写操作中对我来说几乎没有优势。鉴于 AngularFire 构建在此 SDK 之上,它会立即获取更改,即使它们不是通过 AngularFire 进行的。

    如果您遇到的情况似乎并非如此,我建议您使用能够重现该问题的最少、完整/独立的代码创建一个问题。

    【讨论】:

    • 感谢您的洞察力。这将节省我在通过集合引用路由事物并简化我的代码时所做的扭曲。
    猜你喜欢
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2016-06-02
    • 2015-11-15
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多