ส่วนขยาย 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
(ดูด้านล่าง)