我正在构建一个聊天应用程序在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
(如果它是一个没有旧的或空的缓存的新读取)会增加到,但在收听时读取将保持不变。