ফায়ারস্টোর বান্ডেল বিল্ডার এক্সটেনশন ব্যবহার করা

Firestore Bundle Builder ( firestore-bundle-builder ) এক্সটেনশন একটি HTTP ফাংশন স্থাপন করে যা ক্লাউড ফায়ারস্টোর ডেটা বান্ডেল পরিবেশন করে। আপনি Firestore নথিতে বান্ডিলগুলি সংজ্ঞায়িত করেন এবং এক্সটেনশনটি Firebase হোস্টিং CDN বা ক্লাউড স্টোরেজ ব্যবহার করে বিভিন্ন বিল্ট-ইন ক্যাশিং প্রক্রিয়া সহ HTTP অনুরোধের মাধ্যমে স্ট্যাটিক বাইনারি ফাইল ডেটা বান্ডেল পরিবেশন করে। যখন কোনো বান্ডিল বিদ্যমান থাকে না বা বিদ্যমান বান্ডেলের মেয়াদ শেষ হয়ে যায়, এই ফাংশনটি চাহিদা অনুযায়ী একটি নতুন বান্ডেল তৈরি এবং ক্যাশে করবে।

এই এক্সটেনশনটি ব্যবহার করার জন্য, আপনাকে প্রথমে এক্সটেনশনের অ্যাডমিন ড্যাশবোর্ড ব্যবহার করে Firestore-এ এক বা একাধিক বান্ডিল স্পেসিফিকেশন তৈরি করতে হবে। বান্ডেল স্পেসিফিকেশন হল আপনি কীভাবে নামযুক্ত প্রশ্নগুলিকে সংজ্ঞায়িত করেন (সংগ্রহের প্রশ্ন এবং বান্ডেলে যোগ করার জন্য নির্দিষ্ট নথির পথ)।

বান্ডেল স্পেকের ভিতরে, আপনি নামযুক্ত প্রশ্নগুলিতে ব্যবহার করার জন্য প্যারামিটারগুলিও সংজ্ঞায়িত করতে পারেন। আপনি যখন HTTP ফাংশন কল করেন তখন আপনি URL ক্যোয়ারী প্যারাম ব্যবহার করে এই প্যারামিটারগুলির জন্য মান সেট করেন৷

উপরের লিঙ্কটি কিছু নির্দেশনা প্রদান করে যাতে আপনি স্থানীয়ভাবে অ্যাডমিন ইউটিলিটিগুলি চালাতে পারেন। একবার আপনার ওয়েব অ্যাপ সেট আপ হয়ে গেলে, UI ব্যবহার করে একটি স্পেক তৈরি করতে localhost:3000-এ নেভিগেট করুন:

উদাহরণ

বান্ডিল তৈরি এবং পরিবেশন করা

একবার আপনি এক্সটেনশনটি ইনস্টল করার পরে এবং একটি বান্ডিল স্পেক তৈরি করার পরে, আপনি এক্সটেনশন দ্বারা প্রদত্ত HTTP এন্ডপয়েন্টে কল করে বান্ডিল তৈরি এবং পরিবেশন করা শুরু করতে পারেন।

বান্ডেল স্পেসিফিকেশনের উপর নির্ভর করে, অনুরোধ করা বান্ডেলটি ক্লায়েন্টের ক্যাশে, ফায়ারবেস হোস্টিং ক্যাশে বা একটি ক্লাউড স্টোরেজ ফাইল থেকে ফেরত দেওয়া হতে পারে। যখন সমস্ত ক্যাশের মেয়াদ শেষ হয়ে যায়, তখন একটি নতুন সার্ভের অনুরোধ ফায়ারস্টোরকে চাহিদা অনুযায়ী বান্ডিল তৈরি করতে ট্রিগার করবে।

আপনি একটি 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 ফাংশনকে কল করবেন।

ক্লায়েন্ট ইন্টিগ্রেশন

এরপর আপনি ক্লাউড ফায়ারস্টোর 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 সম্পত্তি সংজ্ঞার একটি কী হিসাবে সংজ্ঞায়িত করা হয় (নীচে দেখুন)।