Tiện ích Trình tạo gói Firestore (firestore-bundle-builder
) triển khai một hàm HTTP phân phát gói dữ liệu Cloud Firestore. Bạn xác định các gói trong tài liệu Firestore và tiện ích này sẽ phân phát gói dữ liệu tệp nhị phân tĩnh thông qua các yêu cầu HTTP, cùng với nhiều cơ chế lưu vào bộ nhớ đệm tích hợp sẵn bằng cách sử dụng CDN của Firebase Hosting hoặc Cloud Storage. Khi không có gói nào hoặc các gói hiện có đã hết hạn, hàm này sẽ tạo và lưu một gói mới vào bộ nhớ đệm theo yêu cầu.
Để sử dụng tiện ích này, trước tiên, bạn cần tạo một hoặc nhiều thông số kỹ thuật gói trong Firestore bằng trang tổng quan dành cho quản trị viên của tiện ích. Quy cách gói là cách bạn xác định các truy vấn được đặt tên (truy vấn bộ sưu tập và đường dẫn tài liệu cụ thể để thêm vào gói).
Bên trong thông số kỹ thuật gói, bạn cũng có thể xác định các tham số dùng trong truy vấn được đặt tên. Bạn đặt giá trị cho các tham số này bằng cách sử dụng tham số truy vấn URL khi gọi hàm HTTP.
Đường liên kết ở trên cung cấp một số hướng dẫn để bạn có thể chạy các tiện ích quản trị trên thiết bị. Sau khi thiết lập ứng dụng web, hãy chuyển đến localhost:3000 để tạo thông số kỹ thuật bằng giao diện người dùng:
Tạo và phân phát Gói
Sau khi cài đặt tiện ích và tạo thông số kỹ thuật gói, bạn có thể bắt đầu tạo và phân phát gói bằng cách gọi điểm cuối HTTP do tiện ích cung cấp.
Tuỳ thuộc vào thông số kỹ thuật của gói, gói được yêu cầu có thể được trả về từ bộ nhớ đệm của ứng dụng, bộ nhớ đệm của Firebase Hosting hoặc tệp trên Cloud Storage. Khi tất cả bộ nhớ đệm đã hết hạn, một yêu cầu phân phát mới sẽ kích hoạt các truy vấn trên Firestore để tạo gói theo yêu cầu.
Bạn có thể tận dụng khả năng của CDN lưu trữ Firebase bằng cách thiết lập trang web Lưu trữ Firebase trỏ đến chức năng phân phát bằng cách sử dụng quy tắc ghi lại. CDN sao chép gói của bạn trên nhiều máy chủ khác nhau để người dùng có thể tự động tải gói từ máy chủ gần nhất. Đây là phương pháp ưu tiên.
Để thiết lập tính năng này trong Firebase Hosting, hãy tạo hoặc chỉnh sửa tệp firebase.json
có nội dung sau rồi triển khai trang web:
{
"hosting": {
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "/bundles/*",
"function": "ext-firestore-bundle-builder-serve"
}
]
}
}
Sau khi triển khai, bạn có thể truy cập vào các gói của mình từ CDN bằng URL trang web. Ví dụ: https://your-site-url.com/bundles/:bundleId
.
Ngoài ra, bạn có thể định cấu hình tiện ích này để lưu dữ liệu vào bộ nhớ đệm trong Cloud Storage nếu không muốn sử dụng tính năng Lưu trữ Firebase. Trong trường hợp này, bạn sẽ trực tiếp gọi hàm HTTP đã triển khai để tạo gói.
Tích hợp ứng dụng
Tiếp theo, bạn có thể sử dụng một gói bằng API loadBundle
của SDK Cloud Firestore. Trước tiên, bạn cần tải gói xuống rồi cung cấp cho SDK. Ví dụ:
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);
Sau khi tải, bạn có thể sử dụng dữ liệu từ gói:
Nếu đã chỉ định một mảng đường dẫn tài liệu khi xác định gói, bạn có thể lấy dữ liệu tài liệu trên ứng dụng của mình thông qua gói đó:
import { getFirestore, doc, getDocFromCache } from "firebase/firestore";
// Bundle Document IDs: ['users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2']
const ref = doc(getFirestore(), "users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2");
const snapshot = await getDocFromCache(ref);
Nếu đã chỉ định truy vấn, bạn có thể sử dụng API namedQuery
để chạy truy vấn từ gói:
import { getFirestore, namedQuery } from "firebase/firestore";
const query = await namedQuery(getFirestore(), "queryId");
const snapshot = await getDocsFromCache(query);
Mã truy vấn được định nghĩa là khoá của từng định nghĩa thuộc tính queries
(xem bên dưới).