You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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限制。

读取量情况截图

5次刷新后的读取量统计1
5次刷新后的读取量统计2

内容的提问来源于stack exchange,提问作者Marius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:42:22