การใช้ส่วนขยาย Firestore Bundle Builder

ส่วนขยาย Firestore Bundle Builder ( firestore-bundle-builder ) ปรับใช้ฟังก์ชัน HTTP ที่ให้บริการ ชุดข้อมูล Cloud Firestore คุณกำหนดบันเดิลในเอกสาร Firestore และส่วนขยายจะให้บริการบันเดิลข้อมูลไฟล์ไบนารีแบบคงที่ผ่านคำขอ HTTP พร้อมด้วยกลไกการแคชในตัวต่างๆ โดยใช้ Firebase Hosting CDN หรือ Cloud Storage เมื่อไม่มีบันเดิลหรือบันเดิลที่มีอยู่หมดอายุ ฟังก์ชันนี้จะสร้างและแคชบันเดิลใหม่ตามความต้องการ

หากต้องการใช้ส่วนขยายนี้ คุณต้องสร้างข้อกำหนดชุดรวมอย่างน้อย 1 รายการใน Firestore โดยใช้ แดชบอร์ดผู้ดูแลระบบ ของส่วนขยาย ข้อกำหนดเฉพาะของบันเดิลคือวิธีที่คุณกำหนดการสืบค้นที่มีชื่อ (เคียวรีคอลเลคชันและพาธเอกสารเฉพาะเพื่อเพิ่มลงในบันเดิล)

ภายในข้อมูลจำเพาะของบันเดิล คุณยังสามารถกำหนดพารามิเตอร์ที่จะใช้ในการสืบค้นที่มีชื่อได้ คุณตั้งค่าสำหรับพารามิเตอร์เหล่านี้โดยใช้พารามิเตอร์การสืบค้น URL เมื่อคุณเรียกใช้ฟังก์ชัน HTTP

ลิงก์ด้านบนให้คำแนะนำบางประการเพื่อให้คุณสามารถเรียกใช้ยูทิลิตี้ผู้ดูแลระบบในเครื่องได้ เมื่อคุณตั้งค่าเว็บแอปแล้ว ให้ไปที่ localhost:3000 เพื่อสร้างข้อมูลจำเพาะโดยใช้ UI:

ตัวอย่าง

การสร้างและให้บริการ Bundle

เมื่อคุณติดตั้งส่วนขยายและสร้างข้อมูลจำเพาะของบันเดิลแล้ว คุณสามารถเริ่มสร้างและให้บริการบันเดิลได้โดยการเรียกตำแหน่งข้อมูล HTTP ที่ได้รับจากส่วนขยาย

บันเดิลที่ร้องขออาจถูกส่งคืนจากแคชของไคลเอ็นต์ แคช Firebase Hosting หรือไฟล์ Cloud Storage ทั้งนี้ขึ้นอยู่กับข้อกำหนดเฉพาะของบันเดิล เมื่อแคชทั้งหมดหมดอายุ คำขอให้บริการใหม่จะทริกเกอร์การสืบค้น Firestore เพื่อสร้างบันเดิลตามความต้องการ

คุณสามารถใช้ประโยชน์จากความสามารถของ Firebase Hosting CDN ได้โดยการตั้งค่าไซต์ Firebase Hosting ที่ชี้ไปยังฟังก์ชันการให้บริการโดยใช้กฎการเขียนซ้ำ CDN จำลองบันเดิลของคุณบนเซิร์ฟเวอร์ต่างๆ มากมาย เพื่อให้ผู้ใช้ของคุณสามารถโหลดบันเดิลจากเซิร์ฟเวอร์ที่ใกล้ที่สุดได้โดยอัตโนมัติ นี่คือแนวทางที่ต้องการ

หากต้องการตั้งค่านี้ใน Firebase Hosting ให้สร้างหรือแก้ไขไฟล์ 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 API ของ Cloud Firestore SDK ได้ ขั้นแรกจะต้องดาวน์โหลดบันเดิลก่อน จากนั้นจึงมอบให้กับ 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 (ดูด้านล่าง)