Sử dụng tiện ích trình tạo gói Firestore

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 trên 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 yêu cầu HTTP, cùng 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 dịch vụ Lưu trữ Firebase 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 thông số kỹ thuật theo gói trong Firestore bằng cách sử dụng trang tổng quan dành cho quản trị viên của tiện ích. Thông số kỹ thuật của gói là cách bạn xác định các truy vấn đã đặ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ố của gói, bạn cũng có thể xác định các tham số dùng trong các truy vấn đã đặ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 bạn đã 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:

để làm ví dụ.

Tạo và phân phát Gói

Sau khi cài đặt tiện ích này và tạo thông số kỹ thuật của gói, bạn có thể b��t đ��u x��y d��ng 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 đã yêu cầu có thể được trả về từ bộ nhớ đệm của ứng dụng, bộ nhớ đệm của tính năng Lưu trữ Firebase hoặc tệp 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 chế độ này trong tính năng Lưu trữ Firebase, hãy tạo hoặc chỉnh sửa tệp firebase.json có nội dung sau và 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 các gói từ CDN bằng URL trang web của mình. 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 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 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).