Firestore बंडल बिल्डर एक्सटेंशन का इस्तेमाल करना

Firestore Bundle Builder (firestore-bundle-builder) एक्सटेंशन, एक एचटीटीपी फ़ंक्शन डिप्लॉय करता है . यह फ़ंक्शन, Cloud Firestore के डेटा बंडल उपलब्ध कराता है. Firestore के दस्तावेज़ों में बंडल तय किए जाते हैं. इसके बाद, एक्सटेंशन, एचटीटीपी अनुरोधों के ज़रिए, स्टैटिक बाइनरी फ़ाइल डेटा बंडल उपलब्ध कराता है. साथ ही, Firebase Hosting CDN या Cloud Storage का इस्तेमाल करके, कई बिल्ट-इन कैशिंग मैकेनिज़्म भी उपलब्ध कराता है. अगर कोई बंडल मौजूद नहीं है या मौजूदा बंडलों की समयसीमा खत्म हो गई है, तो यह फ़ंक्शन, मांग पर एक नया बंडल बनाएगा और उसे कैश करेगा.

इस एक्सटेंशन का इस्तेमाल करने के लिए, आपको सबसे पहले एक्सटेंशन के एडमिन डैशबोर्ड का इस्तेमाल करके, Firestore में एक या उससे ज़्यादा बंडल की खास जानकारी देनी होगी. बंडल की खास जानकारी में, नाम वाली क्वेरी तय की जाती हैं. जैसे, कलेक्शन क्वेरी और बंडल में जोड़ने के लिए, खास दस्तावेज़ों के पाथ.

बंडल की खास जानकारी में, नाम वाली क्वेरी में इस्तेमाल किए जाने वाले पैरामीटर भी तय किए जा सकते हैं. एचटीटीपी फ़ंक्शन को कॉल करते समय, यूआरएल क्वेरी पैरामीटर का इस्तेमाल करके, इन पैरामीटर के लिए वैल्यू सेट की जाती हैं.

ऊपर दिए गए लिंक में कुछ निर्देश दिए गए हैं, ताकि एडमिन यूटिलिटी को स्थानीय तौर पर चलाया जा सके. वेब ऐप्लिकेशन सेट अप करने के बाद, यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके खास जानकारी बनाने के लिए, localhost:3000 पर जाएं:

उदाहरण

बंडल बनाना और उपलब्ध कराना

एक्सटेंशन इंस्टॉल करने और बंडल की खास जानकारी बनाने के बाद, एक्सटेंशन से मिले एचटीटीपी एंडपॉइंट को कॉल करके, बंडल बनाए और उपलब्ध कराए जा सकते हैं.

बंडल की खास जानकारी के आधार पर, अनुरोध किया गया बंडल, क्लाइंट के कैश, Firebase Hosting के कैश या Cloud Storage की किसी फ़ाइल से वापस किया जा सकता है. जब सभी कैश की समयसीमा खत्म हो जाती है, तो उपलब्ध कराने के नए अनुरोध से, Firestore की क्वेरी ट्रिगर होंगी. इससे, मांग पर बंडल बनाया जा सकेगा.

Firebase Hosting CDN की सुविधाओं का फ़ायदा पाने के लिए, Firebase Hosting की कोई साइट सेट अप करें. इसमें, फिर से लिखने के नियम का इस्तेमाल करके, उपलब्ध कराने वाले फ़ंक्शन की ओर इशारा किया जाता है. सीडीएन, आपके बंडल को कई अलग-अलग सर्वर पर रेप्लिकेट करते हैं, ताकि आपके उपयोगकर्ता, सबसे नज़दीकी सर्वर से अपने-आप बंडल लोड कर सकें. यह सबसे अच्छा तरीका है.

Firebase Hosting में इसे सेट अप करने के लिए, firebase.json फ़ाइल बनाएं या उसमें बदलाव करें. इसमें यह कॉन्टेंट शामिल करें और साइट डिप्लॉय करें:

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

डिप्लॉय करने के बाद, अपनी साइट के यूआरएल का इस्तेमाल करके, सीडीएन से अपने बंडल ऐक्सेस किए जा सकते हैं. उदाहरण के लिए: https://your-site-url.com/bundles/:bundleId.

इसके अलावा, अगर आपको Firebase Hosting का इस्तेमाल नहीं करना है, तो एक्सटेंशन को Cloud Storage में डेटा कैश करने के लिए कॉन्फ़िगर किया जा सकता है. इस मामले में, बंडल जनरेट करने के लिए, डिप्लॉय किए गए एचटीटीपी फ़ंक्शन को सीधे कॉल किया जाएगा.

क्लाइंट इंटिग्रेशन

इसके बाद, Cloud Firestore SDK टूल के loadBundle API की मदद से, बंडल का इस्तेमाल किया जा सकता है. सबसे पहले, बंडल डाउनलोड करना होगा. इसके बाद, इसे 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 प्रॉपर्टी की परिभाषा की कुंजी के तौर पर तय की जाती हैं. इसके बारे में नीचे बताया गया है.