当前位置: 首页 > 知识库问答 >
问题:

这种使用两个查询的方法会减少Firestore的读取计数工作吗?

潘雅珺
2023-03-14

我有一个名为任务的集合,其中包含100多个文档。应用程序的主屏幕有一个列表视图,显示所有文档的列表,但是这种方法不必要地会在用户每次打开应用程序时花费100次阅读。为了停止这种情况,我在每个文档中添加了一个名为updated_at的字段,每次用户更新任务文档时,我都会更新这些字段。现在这就是我如何构建主屏幕。

 buildListView() async{
   //get locally stored latest updated_at
   const lastUpdatedAt = getLastUpdatedOfLatestFetchedDoc()
   await firestore.collection('tasks').where('updated_at', '>', lastUpdatedAt).get(source: 'server');
   const docs = await firestore.collection('tasks').get(source: 'cache');
  //Build list using docs array
 }

第一次查询将只获取在上次从服务器获取时间之后更新的文档。第二次查询将从缓存中提取所有文档。我不在乎第一次查询的结果,因为它可能会返回任何文档,也可能不会返回任何文档,但如果它返回,它将无论如何存储在缓存中,第二次查询将包括哪个文档。这种方法有效吗?

共有1个答案

武向文
2023-03-14

是的,假设您已经启用了磁盘缓存,这种方法应该可以工作。

它不会显著减少服务器上的文档读取次数,但是,如果您不明确告诉它从服务器获取未更新的文档(就像您在这里所做的那样),FiRest已经从磁盘缓存中读取了未更新的文档。

我还强烈建议使用onSnapshot()来让用户体验更流畅,因为这几乎可以让代码的版本更高效:

  1. 它使用本地缓存中的文档调用回调

因此,您已经可以在这里的步骤1中绘制数据,这通常会带来比等待加载更新数据更好的用户体验。

 类似资料:
  • 我们目前在Firebase上使用免费层,其中包含50k读取和20k写入操作配额。 每天大约有100名用户,我们的读取操作已经超过了配额。Firestore的结构如下所示: 该应用程序将显示按步骤数排序的用户列表。 因此,作为一个简单的计算,在每次应用程序启动时,如果等于集合中存储的用户条目数,则应读取代表读取操作的文档。对于打开应用程序的100个用户和100个用户条目,应该已经有10100次读取操

  • 问题内容: 我想减少阅读次数,以便从(问题数组)中获取问题的详细信息。 我的应用程序就像stackoverflow的一部分一样工作 。 我想说明 一个问题有 多少 顶,观点和评论 。因此,为了处理这个问题,我创建了多个集合,例如 问题集 ID 标题 创建日期 评论集 ID 评论 创建日期 问题喜欢 QuestionID 用户身份 QuestionViews QuestionID 用户身份 问题标签

  • 我一直在用sql计算“游戏”。第一种方法是这样的: 第二个是这样的: 出于所有目的,只包含、、和列。 然而最终大约是10,而最终是50,显然这两种计数方法并不等同或有其他原因,但我正在试图弄清楚:这些之间的差异是什么原因?

  • 上下文:假设我有一个显示餐厅列表的应用程序 方法1:将所有餐厅添加到集合中,并将文档id保存在属于指定类别的数组中。所以,如果我想要所有的印度餐馆,我只需要获取包含所有印度餐馆Id的数组Indian,然后加载它们。 方法2:将所有餐厅添加到集合中,并为每个文档指定一个类别。因此,当用户需要印度餐馆列表时,我会使用where()将其过滤掉。在这种方法中,firestore是否会为所有100000次文

  • 我想使用Ionic 4 Firestore为应用程序提供离线和实时同步功能。 目标部署到本地应用程序(iOS,Android),电子应用程序(Windows和Mac),PWA。 > firestore本地缓存在混合应用中是否持久?firestore缓存使用什么类型的存储?它会像localstorage一样,android/iOS会在存储空间不足时不时删除它。 我正在用下面的代码进行测试,并启用了持

  • 我试图了解mysql查询在GROUP BY和不使用GROUP BY的情况下是如何工作的。 假设我有一个FILM_ACTORS表,其中每个ACTOR_ID都有一个相应的film_id。于是同一个演员参演了N部不同的电影。 我想选出参与20部电影的演员: 这个查询起作用,并返回参与20部电影的actor_id。但如果我只是: 为什么该查询仅在我将其等于film_actor表(5463)的大小时才返回值