在后台运行后是否可以重用Firestore实时查询(以节省成本)

时间:2018-08-26 13:41:36

标签: firebase vue.js google-cloud-firestore vuex

我使用firebase-js-sdk(在Vue PWA中)侦听Firestore中的实时更新。

要在后台运行应用程序后还原它,我使用“ vuex-persist”作为应用程序状态。除了应用程序状态外,我还需要通过在具有相同参数的相同集合上调用.onSnapshot来重新建立实时查询。

我想知道firebase-js-sdk是否能够重用实时查询,该查询是在应用程序进入后台之前进行的。否则,每当用户切换到后台并返回时,我都会被收取费用。

谢谢您的帮助,托马斯

2 个答案:

答案 0 :(得分:1)

解决方案:问题不在于如何使恢复(包括实时侦听器的恢复)在技术上可行。我主要对如何避免每次这样的实时侦听器还原发生收费的事情

根据这两个答案:

如果满足以下先决条件,则不会向我收费:

  • 我重新创建了相同的查询(后者又生成了相同的resumeToken。resinToken是一种密钥,firestore服务器端使用它再次识别查询)
  • 该查询的结果集的任何数据均未更改(firestore最多跟踪30分钟的查询,如果发生更改,该结果集将失效)
  • 启用了持久性,使客户端sdk可以为本地缓存的结果集提供服务
  • 结果集是在最近30分钟内(firestore跟踪查询的最长时间)生成的。如果年龄较大,则再次执行查询,然后我为此付费。

答案 1 :(得分:0)

您应该在main.js或基本上在应用程序启动或进入前台时始终启动的页面中初始化Firebase,以便即使再次进入前台时侦听器已分离,Firebase也会启动,因此可以创建新的侦听器。

因此,在main.js中,您将得到类似的内容:

import Firebase from 'firebase'
let config = {
    apiKey: "...",
    authDomain: "...",
    databaseURL: "...",
    storageBucket: "...",
    messagingSenderId: "..."
  };

let app = Firebase.initializeApp(config)
let db = app.database()
let booksRef = db.ref('books') 
//....etc///

如果您正确设置并在每次加载页面时都运行的方法中设置了侦听器,则您总会有一个侦听器。只要确保避免创建多个侦听器即可。