با استفاده از افزونه Firestore Bundle Builder

افزونه Firestore Bundle Builder ( firestore-bundle-builder ) یک تابع HTTP را به کار می گیرد که بسته های داده Cloud Firestore را ارائه می دهد. شما بسته‌ها را در اسناد Firestore تعریف می‌کنید، و برنامه افزودنی از طریق درخواست‌های HTTP، به همراه مکانیسم‌های کش داخلی مختلف با استفاده از Firebase Hosting CDN یا Cloud Storage، به دسته داده‌های فایل باینری استاتیک ارائه می‌کند. زمانی که بسته‌ای وجود نداشته باشد یا بسته‌های موجود منقضی شده باشند، این تابع بسته‌ای جدید را در صورت تقاضا می‌سازد و ذخیره می‌کند.

برای استفاده از این برنامه افزودنی، ابتدا باید یک یا چند مشخصات بسته نرم افزاری را با استفاده از داشبورد مدیریت برنامه افزودنی در Firestore ایجاد کنید. مشخصات بسته به نحوه تعریف پرس و جوهای نامگذاری شده (پرس و جوهای مجموعه و مسیرهای سند خاص برای افزودن به بسته) است.

در داخل مشخصات بسته نرم افزاری، می توانید پارامترهایی را که قرار است در پرس و جوهای نامگذاری شده استفاده شوند، تعریف کنید. هنگام فراخوانی تابع HTTP، با استفاده از پارامترهای پرس و جو URL، مقادیری را برای این پارامترها تنظیم می کنید.

پیوند بالا دستورالعمل هایی را ارائه می دهد تا بتوانید برنامه های مدیریت را به صورت محلی اجرا کنید. هنگامی که برنامه وب را راه اندازی کردید، به localhost:3000 بروید تا با استفاده از UI یک مشخصات ایجاد کنید:

مثال

ساخت و سرویس باندل

پس از نصب افزونه و ایجاد مشخصات بسته، می توانید با فراخوانی نقطه پایانی HTTP ارائه شده توسط برنامه افزودنی، ساخت و ارائه بسته ها را شروع کنید.

بسته به مشخصات بسته، بسته درخواستی ممکن است از کش مشتری، کش میزبانی Firebase یا یک فایل ذخیره سازی ابری بازگردانده شود. هنگامی که تمام کش ها منقضی شدند، یک درخواست سرویس جدید، پرس و جوهای Firestore را برای ساختن بسته در صورت تقاضا راه اندازی می کند.

می‌توانید با راه‌اندازی یک سایت میزبانی Firebase که با استفاده از قانون بازنویسی به عملکرد سرویس اشاره می‌کند، از قابلیت‌های میزبانی Firebase CDN استفاده کنید. CDN ها بسته شما را در بسیاری از سرورهای مختلف تکرار می کنند، به طوری که کاربران شما می توانند بسته را از نزدیکترین سرور به طور خودکار بارگیری کنند. این رویکرد ارجح است.

برای تنظیم این مورد در میزبانی Firebase، یک فایل firebase.json با محتوای زیر ایجاد یا ویرایش کنید و سایت را مستقر کنید :

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

پس از استقرار، می توانید با استفاده از URL سایت خود از CDN به بسته های خود دسترسی داشته باشید. به عنوان مثال: https://your-site-url.com/bundles/:bundleId .

از طرف دیگر، اگر نمی‌خواهید از میزبانی Firebase استفاده کنید، می‌توانید برنامه افزودنی را برای ذخیره داده‌های حافظه پنهان در فضای ذخیره‌سازی ابری پیکربندی کنید. در این حالت، تابع HTTP مستقر شده را مستقیماً برای تولید بسته‌ها فراخوانی می‌کنید.

ادغام مشتری

در مرحله بعد می توانید یک بسته نرم افزاری را با API loadBundle SDK های Cloud Firestore مصرف کنید. ابتدا بسته نرم افزاری باید دانلود شود و سپس به SDK ارائه شود. مثلا:

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

پس از بارگیری، می توانید از داده های بسته استفاده کنید:

اگر هنگام تعریف بسته، آرایه‌ای از مسیرهای سند را مشخص کرده‌اید، می‌توانید داده‌های سند را روی مشتری خود از طریق بسته دریافت کنید:

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

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

اگر پرس و جوهایی را مشخص کرده اید، می توانید از namedQuery API برای اجرای یک پرس و جو از بسته استفاده کنید:

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

شناسه های پرس و جو به عنوان یک کلید تعریف ویژگی هر queries تعریف می شوند (به زیر مراجعه کنید).