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

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

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

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

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

উদাহরণ

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

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

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

আপনি একটি রিরাইট রুল ব্যবহার করে সার্ভ ফাংশনের দিকে নির্দেশ করে এমন একটি ফায়ারবেস হোস্টিং সাইট সেট আপ করার মাধ্যমে ফায়ারবেস হোস্টিং সিডিএন-এর সক্ষমতার সুবিধা নিতে পারেন। সিডিএন আপনার বান্ডেলকে বিভিন্ন সার্ভারে প্রতিলিপি করে, যাতে আপনার ব্যবহারকারীরা স্বয়ংক্রিয়ভাবে সবচেয়ে কাছের সার্ভার থেকে বান্ডেলটি লোড করতে পারে। এটিই সবচেয়ে পছন্দের পদ্ধতি।

ফায়ারবেস হোস্টিং-এ এটি সেট আপ করতে, নিম্নলিখিত বিষয়বস্তু সহ একটি 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

বিকল্পভাবে, আপনি যদি ফায়ারবেস হোস্টিং ব্যবহার করতে না চান, তাহলে ক্লাউড স্টোরেজে ডেটা ক্যাশ করার জন্য এক্সটেনশনটি কনফিগার করতে পারেন। এই ক্ষেত্রে, বান্ডেল তৈরি করার জন্য আপনাকে সরাসরি ডেপ্লয় করা HTTP ফাংশনটি কল করতে হবে।

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

এরপর আপনি ক্লাউড ফায়ারস্টোর এসডিকে-এর loadBundle এপিআই ব্যবহার করে একটি বান্ডেল গ্রহণ করতে পারবেন। প্রথমে বান্ডেলটি ডাউনলোড করতে হবে এবং তারপর এসডিকে-তে সরবরাহ করতে হবে। উদাহরণস্বরূপ:

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