我正在使用Firebase渲染以下视图。因此,基本上,搜索由Firebase查询提供动力。
我正在使用以下代码:
Query query = FirebaseUtils.buildQuery(
fireStore, 'customers', filters, lastDocument, documentLimit);
print("query =" + query.toString());
QuerySnapshot querySnapshot = await query.getDocuments();
print("Got reply from firestore. No of items =" + querySnapshot.documents.length.toString());
问题:
如果用户一次又一次命中相同的查询,它仍然命中服务器。我使用doc.metadata.isFromCache进行了检查,它始终返回false。
使用查询快照是否可以减少此搜索查询的读取次数?我觉得不是。随着用户一次又一次地更改查询。
还有其他限制读取次数的方法吗?
答案 0 :(得分:1)
- 如果用户一次又一次命中相同的查询,它仍然命中服务器。我通过使用doc.metadata.isFromCache进行了检查,它始终返回false。
如果您在线,它将始终返回false
,这是预期的行为,因为侦听器始终在服务器上寻找更改。如果您要在在线时强制从缓存中检索数据,则应通过向您的Source.CACHE
调用中添加get()
来将其明确指定给Firestore。如果您离线,它将始终返回true
。
- 使用查询快照是否有助于减少此搜索查询的读取次数?我觉得不是。当用户一次又一次地更改查询时。
不,不会。查询快照代表什么?它基本上是一个包含查询结果的对象。但是,如果您一次又一次地执行查询,只要它是相同的查询并且服务器上没有任何更改,那么您将不承担任何读取操作的费用。发生这种情况是因为第二次执行查询时,结果来自缓存。如果您每次执行一次新搜索,将始终向您收取与您的查询返回的元素数相等的读取操作数。此外,如果您创建新搜索并且返回的元素已经在缓存中,那么您将仅对新搜索进行读操作。
- 还有其他限制读取次数的方法吗?
限制查询结果的最简单方法是使用limit()
调用,并将要查询返回的元素数量作为参数传递:
limit(10)