【问题标题】:Will Firestore keep reading documents for an onSnapshot listener if the user closes the browser?如果用户关闭浏览器,Firestore 会继续为 onSnapshot 侦听器读取文档吗?
【发布时间】:2020-05-08 16:11:41
【问题描述】:

如果我开始使用 query.onSnapshot() 调用从 Firestore 集合中读取文档,Firestore 在什么情况下会自动取消订阅并停止读取文档?

具体来说,如果用户关闭了浏览器,或者他的计算机崩溃了,那么会发生什么?我想在某个时候 Firestore 会明白用户不再在那里接收数据,但它是如何工作的?

我正在创建一个 PWA,因此除了关闭浏览器之外,我的用户可能会在应用程序的“内部”导航。我是否必须确保我谨慎地取消订阅所有开放的听众或冒险阅读未使用的文档?或者是否有一些巧妙的机制可以“收集”废弃的 onSnapshot 监听器?

由于涉及金钱,我想知道这一切的细节。我宁愿避免为不再需要的文档阅读付费。

谢谢!

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    由于标签页关闭后网页代码无法运行,此时监听器将停止。查询不是由像服务工作者这样持久的东西管理的。

    也就是说,明确说明何时停止收听绝不是个坏主意。我认为这是一种最佳做法。让听众保持活跃的时间比预期的要长是获得比预期更多的费用的好方法。

    【讨论】:

    • 如果 FireStore 使用基于拉取的方法来轮询我的代码是否有新的更新,我不会担心这一点。但是,这不是与听众一起设置的吗?FireStore 会将更改推送给我。如果我没有明确取消订阅,Firestore 怎么知道不再阅读文档?毕竟,事件的顺序必须是“读取-推送”,所以如果我没有明确取消订阅,Firestore 怎么知道不再读取?
    • Firestore 不需要“知道”任何东西。 Its execution context is shut down by the browser when the tab closes.此后,对于您在该选项卡中设置的任何工作,它根本无法运行,因为浏览器不允许工作“泄漏”到选项卡之外。
    • 我知道我的代码在浏览器关闭后将无法运行。但检查firestore数据库更新的并不是在客户端浏览器中运行的代码。它没有使用轮询系统启动该流量。相反,必须有某种类型的套接字打开,以便 firestore 在检测到数据库更改时可以启动操作。我的问题是,如果“我的套接字一侧”变暗,firestore 如何知道停止读取更改的文档。
    • 不,它没有运行。关闭的页面中没有任何代码正在运行。套接字已关闭,没有更多更新。
    猜你喜欢
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2016-05-20
    • 2021-03-16
    • 2021-05-21
    • 2011-02-07
    • 2012-07-03
    • 1970-01-01
    相关资源
    最近更新 更多