استخدام إضافة Firestore Bundle Builder

تعمل إضافة "أداة إنشاء حِزم Firestore" (firestore-bundle-builder) على نشر دالة HTTP تعرِض حِزم بيانات Cloud Firestore. يمكنك تحديد الحِزم في مستندات Firestore، وتعرض الإضافة حِزمة بيانات الملفات الثنائية الثابتة من خلال طلبات HTTP، إلى جانب آليات مختلفة مضمّنة لتخزين البيانات المؤقت باستخدام CDN أو Cloud Storage في Firebase Hosting. عندما لا تتوفّر حِزمة أو انتهت صلاحية الحِزم الحالية، ستنشئ هذه الدالة حِزمة جديدة وتخزّنها مؤقتًا عند الطلب.

لاستخدام هذه الإضافة، عليك أولاً إنشاء مواصفات حِزمة واحدة أو أكثر في Firestore باستخدام لوحة بيانات المشرف في الإضافة. مواصفات الحِزمة هي كيفية تحديد طلبات البحث المُسمّاة (طلبات البحث عن المجموعات ومسارات المستندات المحدّدة لإضافتها إلى الحزمة).

وفي مواصفات الحزمة، يمكنك أيضًا تحديد مَعلمات مُعَدّة لاستخدامها في طلبات البحث المُسمّاة. يمكنك ضبط قيم لهذه المَعلمات باستخدام مَعلمات طلب البحث لعنوان URL عند استدعاء دالة HTTP.

يقدّم الرابط أعلاه بعض التعليمات التي تتيح لك تشغيل أدوات المشرف محليًا. بعد إعداد تطبيق الويب، انتقِل إلى localhost:3000 لإنشاء مواصفة باستخدام واجهة المستخدم:

مثال

إنشاء الحزمة وعرضها

بعد تثبيت الإضافة وإنشاء مواصفات الحزمة، يمكنك البدء في إنشاء الحِزم وعرضها من خلال طلب نقطة نهاية HTTP التي توفّرها الإضافة.

استنادًا إلى مواصفات الحزمة، قد يتم عرض الحزمة المطلوبة من ذاكرة التخزين المؤقت للعميل أو من ذاكرة التخزين المؤقت لاستضافة Firebase أو من ملف على Cloud Storage. عندما تنتهي صلاحية جميع ذاكرات التخزين المؤقت، سيؤدي طلب عرض جديد إلى تشغيل طلبات بحث Firestore لإنشاء الحِزمة عند الطلب.

يمكنك الاستفادة من إمكانات شبكة توصيل المحتوى (CDN) في "استضافة Firebase" من خلال إعداد موقع إلكتروني على "استضافة Firebase" يشير إلى وظيفة العرض باستخدام قاعدة إعادة كتابة. تنسخ شبكات توصيل المحتوى حزمتك عبر العديد من الخوادم المختلفة، لكي يتمكن المستخدمون من تحميل الحزمة من أقرب خادم تلقائيًا. وهذا هو النهج المفضّل.

لإعداد ذلك في ميزة "استضافة Firebase"، أنشئ ملف firebase.json أو عدِّله يتضمّن المحتوى التالي ونشر الموقع الإلكتروني:

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

بعد نشر الحِزم، يمكنك الوصول إليها من شبكة توصيل المحتوى (CDN) باستخدام عنوان URL لموقعك الإلكتروني. مثلاً: https://your-site-url.com/bundles/:bundleId

بدلاً من ذلك، يمكنك ضبط الإضافة لتخزين البيانات مؤقتًا في Cloud Storage إذا كنت لا تريد استخدام ميزة "استضافة Firebase". في هذه الحالة، يمكنك استدعاء دالة HTTP المنشورة مباشرةً لإنشاء الحِزم.

دمج العميل

بعد ذلك، يمكنك استخدام حزمة تتضمّن واجهة برمجة التطبيقات 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 لتنفيذ طلب بحث من الحزمة:

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

يتم تحديد أرقام تعريف طلبات البحث كمفتاح لكل تعريف للسمة queries (انظر أدناه).