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

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 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 này 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 Lưu trữ Firebase hoặc Cloud Storage. Khi không có gói nào tồn tại 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 gói trong Firestore bằng trang tổng quan quản trị của tiện ích. Thông số kỹ thuật 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).

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 các truy vấn có 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ị cục 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:

ví dụ

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 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 thông số kỹ thuật 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 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 Firestore để tạo gói theo yêu cầu.

Bạn có thể tận dụng các tính năng của CDN của 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 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 sử dụng.

Để thiết lập tính năng này trong Lưu trữ Firebase, 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 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 gói.

Tích hợp ứng dụng

Tiếp theo, bạn có thể sử dụng 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, sau đó 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 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ể 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 xác định là khoá của từng định nghĩa thuộc tính queries (xem bên dưới).