Die Erweiterung „Firestore Bundle Builder“ (firestore-bundle-builder
) stellt eine HTTP-Funktion bereit, die Cloud Firestore-Daten-Bundles bereitstellt. Sie definieren die Bundles in Firestore-Dokumenten. Die Erweiterung stellt statische Binärdateien über HTTP-Anfragen bereit. Dabei werden verschiedene integrierte Caching-Mechanismen über das Firebase Hosting-CDN oder Cloud Storage verwendet. Wenn kein Bundle vorhanden ist oder vorhandene Bundles abgelaufen sind, wird mit dieser Funktion nach Bedarf ein neues Bundle erstellt und im Cache gespeichert.
Wenn Sie diese Erweiterung verwenden möchten, müssen Sie zuerst mindestens eine Bundlespezifikation in Firestore erstellen. Verwenden Sie dazu das Administrator-Dashboard der Erweiterung. In der Bundle-Spezifikation definieren Sie benannte Abfragen (Sammlungsabfragen und bestimmte Dokumentpfade, die dem Bundle hinzugefügt werden sollen).
In der Bundle-Spezifikation können Sie auch Parameter definieren, die in benannten Abfragen verwendet werden sollen. Sie legen Werte für diese Parameter mit URL-Suchparametern fest, wenn Sie die HTTP-Funktion aufrufen.
Über den oben genannten Link finden Sie eine Anleitung zum lokalen Ausführen der Administrator-Dienstprogramme. Nachdem Sie die Web-App eingerichtet haben, rufen Sie localhost:3000 auf, um über die Benutzeroberfläche eine Spezifikation zu erstellen:
Bundle erstellen und bereitstellen
Nachdem Sie die Erweiterung installiert und eine Bundle-Spezifikation erstellt haben, können Sie mit dem Erstellen und Bereitstellen von Bundles beginnen, indem Sie den von der Erweiterung bereitgestellten HTTP-Endpunkt aufrufen.
Je nach Bundlespezifikation wird das angeforderte Bundle möglicherweise aus dem Cache des Clients, dem Firebase Hosting-Cache oder einer Cloud Storage-Datei zurückgegeben. Wenn alle Caches abgelaufen sind, werden durch eine neue Serve-Anfrage Firestore-Abfragen ausgelöst, um das Bundle bei Bedarf zu erstellen.
Sie können die CDN-Funktionen von Firebase Hosting nutzen, indem Sie eine Firebase Hosting-Website einrichten, die mithilfe einer Überschreibungsregel auf die Serve-Funktion verweist. CDNs replizieren Ihr Bundle auf vielen verschiedenen Servern, sodass Ihre Nutzer das Bundle automatisch vom nächstgelegenen Server laden können. Dies ist der bevorzugte Ansatz.
Um dies in Firebase Hosting einzurichten, erstellen oder bearbeiten Sie eine firebase.json
-Datei mit dem folgenden Inhalt und stellen Sie die Website bereit:
{
"hosting": {
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "/bundles/*",
"function": "ext-firestore-bundle-builder-serve"
}
]
}
}
Nach der Bereitstellung können Sie über die URL Ihrer Website auf Ihre Bundles im CDN zugreifen. Beispiel: https://your-site-url.com/bundles/:bundleId
.
Alternativ können Sie die Erweiterung so konfigurieren, dass Daten in Cloud Storage zwischengespeichert werden, wenn Sie Firebase Hosting nicht verwenden möchten. In diesem Fall rufen Sie die bereitgestellte HTTP-Funktion direkt auf, um Bundles zu generieren.
Clientintegration
Als Nächstes können Sie ein Bundle mit der loadBundle
-API der Cloud Firestore SDKs verwenden. Das Bundle muss zuerst heruntergeladen und dann dem SDK zur Verfügung gestellt werden. Beispiel:
import { loadBundle } from "firebase/firestore";
// Download the bundle from the Firebase Hosting CDN:
const bundle = await fetch("/bundles/:bundleId");
// If not using a CDN, download the bundle directly:
// const bundle = await fetch('https://<location>-<project-id>.cloudfunctions.net/ext-firestore-bundle-builder-serve/:bundleId');
await loadBundle(bundle);
Nach dem Laden können Sie die Daten aus dem Bundle verwenden:
Wenn Sie beim Definieren des Bundles ein Array von Dokumentpfaden angegeben haben, können Sie die Dokumentdaten auf Ihrem Client über das Bundle abrufen:
import { getFirestore, doc, getDocFromCache } from "firebase/firestore";
// Bundle Document IDs: ['users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2']
const ref = doc(getFirestore(), "users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2");
const snapshot = await getDocFromCache(ref);
Wenn Sie Abfragen angegeben haben, können Sie die namedQuery
API verwenden, um eine Abfrage aus dem Bundle auszuführen:
import { getFirestore, namedQuery } from "firebase/firestore";
const query = await namedQuery(getFirestore(), "queryId");
const snapshot = await getDocsFromCache(query);
Abfrage-IDs werden als Schlüssel der einzelnen queries
-Attributdefinitionen definiert (siehe unten).