gpt4 book ai didi

javascript - firestore.onSnapshot 回调函数正在阻塞渲染进程

转载 作者:行者123 更新时间:2023-12-01 00:46:24 27 4
gpt4 key购买 nike

我正在使用 Firestore 的 onSnapshot() 方法来监听约 5,000 个文档的集合。在传递给 onSnapshot 的回调中,我获取快照并将文档格式化为数组和对象。

db.onSnapshot(snap => {
const list = [];
const ref = {};
for (let i = 0, size = snap.size; i < size; i++) {
const doc = snap.docs[i];
const id = doc.id;
const data = doc.data();
list.push(data);
ref[id] = { ...data };
}
// Save list and ref to redux store.
}

这个过程对于较小的集合来说效果很好。但是,现在有了这个更大的集合,当用户向集合提交新文档时,用户看到的“成功”提示会被 for 循环阻止。

详细说明:当用户提交新文档时,将调用db.add(newDocument)。在 .then() 中,我们重新渲染页面以向用户显示确认消息。但与此同时,快照监听器检测到集合中的更改,现在再次循环遍历所有 5,000 个文档。这只需要一两秒,但会给用户带来明显的“滞后”。

这个过程应该如何处理?

最佳答案

你可能应该:

  • 只要监听器保持附加状态,就保留 ref 的值 - 不要每次都重新创建它。
  • 迭代snap.docChanges因此您只需处理那些会导致您之前的 ref 内容发生更改的更改。这将在type中指出。的变化。

这应该会大大减少每次发生变化时创建和销毁的对象数量。

关于javascript - firestore.onSnapshot 回调函数正在阻塞渲染进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57318327/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com