Tiện ích Firestore Bundle Builder (firestore-bundle-builder
) triển khai một hàm HTTP phân phát các 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 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 bằ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 vào bộ nhớ đệm một gói mới 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 quy cách 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ê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).
Trong thông số kỹ thuật của gói, bạn cũng có thể xác định các thông số sẽ được dùng trong các truy vấn được đặt tên. Bạn đặt các giá trị cho những tham số này bằng cách sử dụng các 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ị cục bộ. Sau khi bạn thiết lập ứng dụng web, hãy chuyển đến localhost:3000 để tạo một 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 một tệp đặc tả gói, bạn có thể bắt đầu tạo và phân phát các 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 quy cách 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 một tệp Cloud Storage. Khi tất cả cá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 Firestore để tạo gói theo yêu cầu.
Bạn có thể tận dụng các chức năng của CDN Lưu trữ Firebase bằng cách thiết lập một trang web Lưu trữ Firebase trỏ đến hàm phân phát bằng cách sử dụng một quy tắc viết 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 được ưu tiên.
Để thiết lập chế độ này trong Firebase Hosting, hãy tạo hoặc chỉnh sửa tệp firebase.json
có nội dung sau đây 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 để lưu dữ liệu vào bộ nhớ đệm trong Cloud Storage nếu không muốn sử dụng dịch vụ Lưu trữ Firebase. Trong trường hợp này, bạn sẽ gọi trực tiếp hàm HTTP đã triển khai để tạo các 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 Cloud Firestore SDK. Trước tiê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 trong 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 khách 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 các truy vấn, bạn có thể dùng API namedQuery
để chạy một 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 xác định là khoá của từng định nghĩa thuộc tính queries
(xem bên dưới).