Firestore 是一种良好的可扩缩数据库解决方案,能够让数据在多个网络客户端之间保持同步。
对许多应用来说,Firestore 的代管式离线支持尤为重要,可帮助您构建不受网络延迟或互联网连接影响的响应迅速的应用。但是功能丰富的 SDK 的大小会更大。对于只需要使用基本的创建、读取、更新和删除操作,而不需要代管式离线支持的应用,Firebase 提供什么?
解决方案:Firestore Lite
Firestore Lite 是一种轻量级独立式 REST 专用 Firestore SDK,支持单一文档提取、查询执行和文档更新,并且大小比常规 Web SDK 小得多。Firestore Lite 舍弃了延迟补偿、离线缓存、查询接续和快照侦听器功能,但对于特定的使用场景,库大小和启动时间方面的缩减所带来的益处足以盖过这些不足。
导入 Firestore Lite
Firestore Lite 通过 npm 作为模块化 SDK 的一部分的提供。因此,它是完全模块化且可摇树。
支持以下导入样式。
import { initializeApp } from "firebase/app";
import {
getFirestore,
getDoc,
updateDoc
} from 'firebase/firestore/lite';
Firestore Lite 不支持的 API 功能
为了缩减大小和提高速度,Firestore Lite 舍弃了标准 Firestore SDK 中的以下功能:
- DocumentSnapshot 事件处理脚本。不包括
onSnapshot
方法以及DocumentChange
、SnapshotListenerOptions
、SnapshotMetadata
、SnapshotOptions
和Unsubscribe
对象。 - 持久性帮助程序。不包括
enableIndexedDBPersistence
、enableMultiTabIndexedDbPersistence
和clearIndexedDbPersistence
方法。 - Firestore 软件包。不包括
loadBundle
方法和相关方法,不包括LoadBundleTask
和LoadBundleTaskProgress
对象。
实现文档提取、查询和更新
导入 Firestore Lite 后,您便可以使用所有熟悉的 API get和 update 调用。添加数据和获取数据的使用场景都适用。
import {
getFirestore,
getDoc,
updateDoc,
doc
} from '@firebase/firestore/lite';
const firestore = getFirestore(app);
const docRef = doc(firestore, 'collection/doc');
const docSnap = await getDoc(docRef);
await updateDoc(docRef, "field", 'value');
何时使用 Firestore Lite
决定舍弃标准 Firestore SDK 的离线持久化和缓存功能可能会很困难。在决定舍弃这些功能来换取 Firestore Lite 的较低开销之前,您应该先全面了解这些功能。一般来讲,在决定是否使用 Firestore Lite 时,您需要权衡以下因素:
- 在线状态 - Firestore Lite 适合不需要实时更新和连接的应用。
- 大小限制 - 如果您希望减小整体 JavaScript 软件包大小,则 Firestore Lite 非常适合。