Firebase缓存文档被计入读取计费?页面刷新后读取量持续增长
Firestore缓存读取未生效导致读取量持续上涨的解决方案
问题根源
你使用的getDocs()默认会优先向Firestore服务器发起请求,即便本地存在缓存数据,也会产生新的文档读取计数。只有明确指定读取来源为缓存时,才会使用本地缓存且不消耗读取额度。
修正后的代码
要实现离线优先的读取策略(先读缓存,缓存失效时再请求服务器),可以通过getDocs的选项参数指定读取源,结合try-catch处理缓存读取失败的情况:
const usersRef = collection(db, 'users'); // 建议添加limit(50)控制单次读取文档数量,避免超额消耗 const userQuery = query(usersRef, orderBy('createdAt', 'desc'), limit(50)); export const getUsers = async () => { try { // 尝试从本地缓存读取 const snapshot = await getDocs(userQuery, { source: 'cache' }); return snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })) as Users[]; } catch (err) { // 缓存读取失败, fallback到服务器读取 const snapshot = await getDocs(userQuery, { source: 'server' }); return snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })) as Users[]; } };
关键说明
- Firestore仅对从服务器获取的文档计入读取量,本地缓存读取不产生计数;
- 若你希望强制仅从服务器读取(忽略缓存),可直接使用
{ source: 'server' }; - 原代码未设置
limit(50),若集合中文档数超过50,单次读取会返回所有符合排序条件的文档,这会导致读取量远超预期,务必添加limit限制。
读取量情况截图


内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

