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

问题描述 投票:2回答:2

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

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

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

谢谢你的帮助,托马斯

firebase vue.js google-cloud-firestore vuex
2个回答
1
投票

解决方案:问题不在于如何使恢复(包括恢复实时监听器)在技术上有效。我主要感兴趣的是如何避免在每次实时监听器的恢复发生时收取费用。

根据这2个答案:

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

  • 我重新创建相同的查询(后者又生成相同的resumeToken。resumeToken是一种密钥,由firestore服务器端用于再次识别查询)
  • 该查询的结果集的数据没有更改(firestore跟踪查询最多30分钟,如果发生更改,则会使结果集无效)
  • 启用持久性,使客户端sdk能够提供本地缓存的结果集
  • 结果集是在最近30分钟内生成的(firestore跟踪查询的最长时间)。如果它比较旧,那么查询会再次执行,然后我会收取相应的费用。

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///

如果您正确设置并在每次加载页面时运行的方法中设置侦听器,则始终有一个侦听器。只需确保您避免创建多个侦听器。

© www.soinside.com 2019 - 2024. All rights reserved.