Firestore Bundle Builder Uzantısını Kullanma

Firestore Bundle Builder ( firestore-bundle-builder ) uzantısı , Cloud Firestore veri paketlerine hizmet eden bir HTTP işlevi dağıtır. Paketleri Firestore belgelerinde tanımlarsınız ve uzantı, Firebase Hosting CDN veya Cloud Storage kullanarak çeşitli yerleşik önbelleğe alma mekanizmalarının yanı sıra, HTTP istekleri aracılığıyla statik ikili dosya veri paketi sunar. Hiçbir paket mevcut olmadığında veya mevcut paketlerin süresi dolduğunda, bu işlev isteğe bağlı olarak yeni bir paket oluşturacak ve önbelleğe alacaktır.

Bu uzantıyı kullanmak için öncelikle uzantının yönetici kontrol panelini kullanarak Firestore'da bir veya daha fazla paket spesifikasyonu oluşturmanız gerekir. Paket spesifikasyonu, adlandırılmış sorguları (toplama sorguları ve pakete eklenecek belirli belge yolları) nasıl tanımladığınızdır.

Paket spesifikasyonunun içinde, adlandırılmış sorgularda kullanılması amaçlanan parametreleri de tanımlayabilirsiniz. HTTP işlevini çağırdığınızda URL sorgu parametrelerini kullanarak bu parametrelerin değerlerini ayarlarsınız.

Yukarıdaki bağlantı, yönetici yardımcı programlarını yerel olarak çalıştırabilmeniz için bazı talimatlar sağlar. Web uygulamasını kurduktan sonra, kullanıcı arayüzünü kullanarak bir spesifikasyon oluşturmak için localhost:3000'e gidin:

örnek

Paketi oluşturmak ve sunmak

Uzantıyı yükledikten ve bir paket spesifikasyonu oluşturduktan sonra, uzantı tarafından sağlanan HTTP uç noktasını çağırarak paketler oluşturmaya ve sunmaya başlayabilirsiniz.

Paket spesifikasyonuna bağlı olarak istenen paket, müşterinin önbelleğinden, Firebase Hosting önbelleğinden veya bir Cloud Storage dosyasından döndürülebilir. Tüm önbelleklerin süresi dolduğunda, yeni bir sunma isteği, isteğe bağlı paketi oluşturmak için Firestore sorgularını tetikler.

Yeniden yazma kuralı kullanarak hizmet işlevine işaret eden bir Firebase Hosting sitesi kurarak Firebase Hosting CDN'nin yeteneklerinden yararlanabilirsiniz. CDN'ler paketinizi birçok farklı sunucuya kopyalar, böylece kullanıcılarınız paketi en yakın sunucudan otomatik olarak yükleyebilir. Bu tercih edilen yaklaşımdır.

Bunu Firebase Hosting'de ayarlamak için aşağıdaki içeriklere sahip bir firebase.json dosyası oluşturun veya düzenleyin ve siteyi dağıtın :

{
  "hosting": {
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "rewrites": [
      {
        "source": "/bundles/*",
        "function": "ext-firestore-bundle-builder-serve"
      }
    ]
  }
}

Dağıtıldıktan sonra paketlerinize site URL'nizi kullanarak CDN'den erişebilirsiniz. Örneğin: https://your-site-url.com/bundles/:bundleId .

Alternatif olarak, Firebase Hosting'i kullanmak istemiyorsanız uzantıyı Cloud Storage'da verileri önbelleğe alacak şekilde yapılandırabilirsiniz. Bu durumda, paketler oluşturmak için konuşlandırılan HTTP işlevini doğrudan çağırırsınız.

İstemci Entegrasyonu

Daha sonra Cloud Firestore SDK'larının loadBundle API'sini içeren bir paket kullanabilirsiniz. Öncelikle paketin indirilmesi ve ardından SDK'ya sağlanması gerekir. Örneğin:

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);

Yüklendikten sonra paketteki verileri kullanabilirsiniz:

Paketi tanımlarken bir dizi belge yolu belirttiyseniz istemcinizdeki belge verilerini paket aracılığıyla alabilirsiniz:

import { getFirestore, doc, getDocFromCache } from "firebase/firestore";
// Bundle Document IDs: ['users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2']

const ref = doc(getFirestore(), "users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2");
const snapshot = await getDocFromCache(ref);

Sorguları belirttiyseniz paketten bir sorgu çalıştırmak için namedQuery API'yi kullanabilirsiniz:

import { getFirestore, namedQuery } from "firebase/firestore";
const query = await namedQuery(getFirestore(), "queryId");
const snapshot = await getDocsFromCache(query);

Sorgu kimlikleri, her queries özelliği tanımının anahtarı olarak tanımlanır (aşağıya bakın).