javascript - Web 应用:Firestore 缓存 - 仅读取更改的文档
问题描述
当谈到使用官方 Web SDK 进行 Firestore 缓存时,它是否会优化读取,以便仅在上次读取后文档发生更改时才向服务器“发送”读取请求?(因此每次尝试不会生成 1 次额外的文档读取)
为了详细说明,请考虑以下场景:
- 用户在 Web 应用上打开他们的个人资料页面
- Firestore 向服务器发出请求以获取配置文件文档(针对定价读取 1)
- 用户离开页面并在一段时间后返回到个人资料
- Web 应用需要再次访问配置文件文档
在第 4 步中,Firestore 是否会默认从服务器请求文档,即使它没有更改?(这意味着每次用户导航到个人资料页面时,它都将计为对定价的 1 次额外阅读)
如果是,是否可以配置 Firestore,使其仅使用缓存的对象,并且仅在服务器上的对象更改时才更新它?怎么做?
解决方案
默认情况下,Firestore SDK为 Web 客户端禁用缓存数据的本地持久性(但默认情况下为 Android 和 iOS 启用)。如果要启用持久性,请按照文档中的说明进行操作
firebase.firestore().enablePersistence()
.catch(function(err) {
if (err.code == 'failed-precondition') {
// Multiple tabs open, persistence can only be enabled
// in one tab at a a time.
// ...
} else if (err.code == 'unimplemented') {
// The current browser does not support all of the
// features required to enable persistence
// ...
}
});
// Subsequent queries will use persistence, if it was enabled successfully
如果文档在本地缓存中是最新的,则不会向您收取阅读文档的费用。
推荐阅读
- mysql - 如何使用 3 个表执行 MySQL 查询?其中一张表在另外两张表中有外键
- html - 如何从 FormGroup 中访问 FormArray 元素?
- c++ - 当矩阵中的所有值都为负时,此代码是否通过
- javascript - JS 在应该这样做时不删除类
- docker - 谷歌云计算实例更新
- reactjs - 在 ReactJS 中提交具有多个提交按钮的表单
- php - Docker:MySQL容器绑定主机mysqld套接字
- html - 如何在 Python 中使用 Beautiful soup 在特定列中查找特定文本
- postgresql - postgres AWS RDS - 无法创建复制用户
- python - 如何解决 UserWarning:使用与输入大小 (torch.Size([1])) 不同的目标大小 (torch.Size([]))?