باستخدام ملحق Firestore Bundle Builder

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

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

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

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

مثال

بناء وخدمة الحزمة

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

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

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

لإعداد هذا في استضافة 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 Hosting. في هذه الحالة، يمكنك استدعاء وظيفة 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);

إذا قمت بتحديد استعلامات، فيمكنك استخدام واجهة API namedQuery لتشغيل استعلام من الحزمة:

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

يتم تعريف معرفات الاستعلام كمفتاح لكل تعريف خاصية queries (انظر أدناه).