javascript - 如何在Web上保存Firestore数据库请求以减少调用

标签 javascript reactjs firebase google-cloud-firestore

我有一个包含我所有产品的产品页面,每次有人按 F5 时它都会被执行。我想保存所有产品,但是当添加产品时,它可以更新一次以减少所有 api 调用。

//JS文件 我的 cookies 尝试: 它有效,我每 0.5 天才收到一次 api 调用,但如果我的产品发生更新,我只会稍后收到

//if cookie === undifined
const firestore = firebase.firestore()
firestore.doc("products/phones").onSnapshot(function (doc) {
    if (doc && doc.exists) {
        const products = doc.data().produc
        //Save doc.data().produc in cookie 0.5 day expirery
    }
})

我想保存我的 Firestore 请求客户端,并且仅在需要更新产品列表时才发出 Firestore 请求。

最佳答案

你的第二种方法没有成功的机会。 firebase.json 文件由 Firebase Hosting 使用,与 Cloud Firestore 完全无关。

您的第一种方法可以工作,尽管您没有包含实际确定何时附加 onSnapshot 监听器的代码。但正如您所发现的,每天最多附加监听器两次意味着您每天最多只能获得两次更新,并且同时您可能会提供过时的数据。

听起来您必须在提供新数据和减少服务器调用之间做出选择。这是一个相当常见的权衡。

还有一些其他方法可以减少服务器最新数据所需的文档读取次数:

  1. 在每个文档中添加数据更新时的时间戳,然后使用查询仅请求新数据。您将在本地存储中保留上次请求/获取数据的时间戳,并在每次查询中使用该时间戳。
  2. 将最近更新的数据汇总到一篇或几篇文档中,这样您就需要阅读更少的文档。

关于javascript - 如何在Web上保存Firestore数据库请求以减少调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58525558/

相关文章:

javascript - 更新动态创建的组件

javascript - JS window.matchMedia 正确语法

javascript - 为什么 PHP echo 返回完整标记的 html 而不是 echo 中的内容?

javascript - 在标准 ES 6 类中添加 getter 方法有什么意义吗?

Android Studio-程序类型已经存在 : com. google.android.gms.internal.measurement.zzwp

ios - 如何从 iOS Today Extension 访问当前的 firebase 用户?

ios - 对于 google firebase 动态链接,预览页面为 (erf=1),即使安装了应用程序,该链接也会始终将您重定向到应用程序商店

javascript - Apollo-client (react) - 创建突变的更新 - "Can' t 在对象 (ROOT_QUERY) 上找到字段 Fund({})"

reactjs - 像 'useLocation' 这样的 react 路由器钩子(Hook)的 stub 不起作用

javascript - react-icons 使用 webpack 解决错误