在Firestore, react app中减少文档读取



我正在构建一个聊天应用程序在react使用Firebase Firestore作为后端数据库。

我得到最近的25条消息在useEffect钩子

useEffect(() => {
const q = query(
collection(db, 'messages'),
orderBy('createdAt', 'desc'),
limit(25)
);
return onSnapshot(q, (snapshot) => {
setData(
snapshot.docs.map((doc) => {
console.log('document read');
return { ...doc.data(), id: doc.id };
})
);
});
}, []);

但是此操作导致页面加载时读取25个文档,发送消息时读取50个文档。如果连接了更多的用户,则每个用户发送的单个消息将产生25个请求。有没有办法减少读取?

完整代码:- https://github.com/Puneet56/Converse

如果在运行查询中得到一个新的结果,则不会在25个结果的限制下获得25个读取。如文档所述:

当您收听查询结果时,您将为读取收费每次添加或更新结果集中的文档时。你是当从结果集中删除文档时,还会收取读取费用因为文档已经更改了。(相反,当一个文档是已删除,阅读不收费)

同样,如果侦听器断开连接超过30分钟(对于例如,如果用户离线),您将为读取收取费用如果您发出了一个全新的查询。

如文档中所述,您将只对added和由于新查询进入而超出查询限制的查询收费。所以每条新消息可能只有2次读取。我认为这是一个合理的数额。我无法在聊天应用程序中减少这个数量。即使你增加查询限制,只有你的初始reads(如果它是一个没有旧的或空的缓存的新读取)会增加到,但在收听时读取将保持不变。

最新更新