Firestore Bundle Builder Uzantısı'nı kullanma

Firestore Bundle Builder (firestore-bundle-builder) uzantısı, Cloud Firestore veri paketleri sunan bir HTTP işlevi dağıtır. Paketleri Firestore belgelerinde tanımlarsınız ve uzantı, HTTP istekleri aracılığıyla statik ikili program dosyası veri paketinin yanı sıra Firebase Hosting CDN veya Cloud Storage kullanan çeşitli yerleşik önbelleğe alma mekanizmaları sunar. Herhangi bir paket yoksa veya mevcut paketlerin süresi dolduğunda bu işlev, istek üzerine yeni bir paket oluşturur ve önbelleğe alır.

Bu uzantıyı kullanmak için önce uzantının yönetici kontrol panelini kullanarak Firestore'da bir veya daha fazla paket özelliği oluşturmanız gerekir. Paket spesifikasyonu, adlandırılmış sorguları (koleksiyon sorguları ve pakete eklenecek belirli doküman yolları) tanımlama şeklinizdir.

Paket spesifikasyonunda, 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ıda, yönetici yardımcı programlarını yerel olarak çalıştırabilmeniz için bazı talimatlar verilmiştir. Web uygulamasını ayarladıktan sonra, kullanıcı arayüzünü kullanarak bir spesifikasyon oluşturmak için localhost:3000'e gidin:

örnek

Paket oluşturma ve sunma

Uzantıyı yükleyip paket spesifikasyonu oluşturduktan sonra uzantı tarafından sağlanan HTTP uç noktasını çağırarak paket oluşturmaya ve yayınlamaya başlayabilirsiniz.

Paket özelliklerine bağlı olarak, istenen paket istemcinin ö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, paketi isteğe bağlı olarak oluşturmak için Firestore sorgularını tetikler.

Yeniden yazma kuralından yararlanarak, sunma işlevine yönlendiren bir Firebase Barındırma sitesi oluşturarak Firebase Hosting CDN'nin özelliklerinden yararlanabilirsiniz. CDN'ler, paketinizi birçok farklı sunucuya çoğaltır, böylece kullanıcılarınız paketi en yakın sunucudan otomatik olarak yükleyebilir. Tercih edilen yaklaşım budur.

Firebase Hosting'de bunu ayarlamak için aşağıdaki içeriğe 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ımdan sonra, site URL'nizi kullanarak CDN'den paketlerinize erişebilirsiniz. Örnek: 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, paket oluşturmak için dağıtılan HTTP işlevini doğrudan çağırırsınız.

İstemci Entegrasyonu

Ardından Cloud Firestore SDK'larının loadBundle API'si ile bir paket kullanabilirsiniz. Önce paketin indirilmesi ve ardından SDK'ya sağlanması gerekir. Örnek:

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üklemenin ardından paketteki verileri kullanabilirsiniz:

Paketi tanımlarken bir belge yolları dizisi 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);

Sorgu belirttiyseniz paketten 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 mülk tanımının anahtarı olarak tanımlanır (aşağıya bakın).