Firestoreは、Webクライアント間でデータの同期を維持するための優れたスケーラブルなデータベースソリューションです。
多くのアプリでは、Firestoreのマネージドオフラインサポートが特に重要であり、ネットワークの遅延やインターネット接続に関係なく機能するレスポンシブアプリを構築できます。ただし、機能が豊富なSDKにはサイズのコストがかかります。 Firebaseは、基本的な作成、読み取り、更新、削除の操作のみを使用する必要があり、管理されたオフラインサポートを必要としないアプリに何を提供しますか?
解決策:Firestore Lite
Firestore Liteは、軽量のスタンドアロンREST専用Firestore SDKであり、通常のWeb SDKサイズの何分の1かで、単一のドキュメントフェッチ、クエリ実行、およびドキュメント更新をサポートします。 Firestore Liteは、レイテンシー補正、オフラインキャッシュ、クエリ再開、スナップショットリスナーを省略していますが、特定のユースケースでは、ライブラリサイズと起動時間の削減は大きなトレードオフになります。
FirestoreLiteをインポートする
Firestore Liteは、モジュラーSDKの一部としてnpmを介して利用できます。したがって、完全にモジュール化されており、ツリーシェイクが可能です。
次のインポートスタイルがサポートされています。
import { initializeApp } from "firebase/app";
import {
getFirestore,
getDoc,
updateDoc
} from 'firebase/firestore/lite';
FirestoreLiteでサポートされていないAPI機能
サイズと速度に関して、FirestoreLiteは標準のFirestoreSDKから次の機能を省略しています。
- 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');
FirestoreLiteを使用する場合
標準のFirestoreSDKのオフライン永続性とキャッシュ機能をいつ手放すかを決めるのは難しい場合があります。これらの機能をFirestoreLiteのより低いオーバーヘッドと交換することを決定する前に、これらの機能を理解する必要があります。一般に、Firestore Liteを使用するかどうかを決定するときは、次の要素を考慮してください。
- オンラインステータス-FirestoreLiteは、ライブアップデートを必要とせず、接続性のあるアプリに適しています。
- サイズの制約-JavaScriptバンドル全体のサイズを小さくしたい場合は、FirestoreLiteが最適です。