【问题标题】:What could be the reason for firebase to show great unexplained amounts of reads?firebase 显示大量无法解释的读取的原因可能是什么?
【发布时间】:2021-09-12 20:00:09
【问题描述】:

我正在开发一个从 firestore 读取数据的 chrome 扩展程序,在过去的几天里,我会以最多 50 次读取完成一天的工作,今天由于某种原因它显示了高达 34K 的读取量,我该怎么做修复这个错误?

这是我的代码

useEffect(() => {
    const getNotes = () => {
      db.collection("Users")
        .doc(user.email)
        .collection("Notes")
        .get()
        .then((snapshot) => {
          const loadedNotes = snapshot.docs.map((docs) => {
            return {
              note: docs.data().note,
              id: docs.id,
            };
          });
          setNotes(Object.values(loadedNotes) ?? []);
        });
    };
    getNotes();
  });

此函数在 3 个不同的组件中编写了 3 次,用于笔记、待办事项和即将发生的事件。待办事项有一个额外的文档字段,即完成状态,即将发生的事件有一个事件日期字段。

我的项目中也有 firebase 身份验证,我不知道这是否重要。

【问题讨论】:

    标签: reactjs google-cloud-firestore async-await


    【解决方案1】:

    你的 useEffect 依赖项在哪里?正如所写,这将在组件的每次渲染上运行......这是你想要的吗?

    【讨论】:

    • 我实际上没有使用任何依赖项,如果它以大约 1 次/秒的速度获取异步,这算作文档读取吗?例如,是否算作每分钟 60 次读取?
    • 它将在每个 render 上运行,其中包括 每个 对组件中的 props 或状态的更改 - 并且写入的每个 .get() 都将计算在内multiple 读取。我认为您需要花更多时间了解 React 组件的生命周期。
    • 谢谢,是的,事实证明我的天气 api 每秒都会获取数据,并导致组件重新渲染并导致大量阅读文档。
    【解决方案2】:

    如果您在集合引用上使用get(),则每次请求时都会加载该集合中的每个文档,这对读取来说是非常过度的。您应该在需要时使用limit(n) 和分页,如果可能的话:在文档上使用source:cache

    理想情况下,您应该使用某种 redux/redis 本地存储,在应用加载时添加一次数据并从中读取数据,然后再随机抓取到 Firebase 集合

    【讨论】:

    • 我仍然只有一个集合和很少的文档(最多 4 或 5 个文档),这意味着如果是这样的话,34000 次读取被严重夸大了。
    • 您忽略了这些组件的运行频率,这些读取来自某个地方
    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 2021-09-01
    • 2012-01-01
    • 2011-09-02
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多