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

Tiện ích mở rộng Firestore Bundle Builder ( firestore-bundle-builder ) triển khai chức năng HTTP phục vụ 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 mở rộng phân phối 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ế bộ nhớ đệm tích hợp khác nhau bằng cách sử dụng Firebase Hosting CDN 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, chức năng này sẽ tạo và lưu trữ một gói mới theo yêu cầu.

Để sử dụng tiện ích mở rộng này, trước tiên bạn cần tạo một hoặc nhiều thông số gói trong Firestore bằng bảng điều khiển quản trị của tiện ích mở rộng. Đặc tả gói là cách bạn xác định các truy vấn được đặt tên (truy vấn tập hợp và đường dẫn tài liệu cụ thể để thêm vào gói).

Bên trong thông số gói, bạn cũng có thể xác định các tham số sẽ được sử dụng trong các 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.

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ộ. Khi bạn đã thiết lập ứng dụng web, hãy điều hướng đến localhost:3000 để tạo thông số kỹ thuật bằng giao diện người dùng:

ví dụ

Xây dựng và phục vụ Bundle

Sau khi cài đặt tiện ích mở rộng và tạo thông số gói, bạn có thể bắt đầu xây dựng và phân phát các gói bằng cách gọi điểm cuối HTTP do tiện ích mở rộng cung cấp.

Tùy thuộc vào thông số gói, gói được yêu cầu có thể được trả về từ bộ đệm của khách hàng, bộ đệm Firebase Hosting 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 để xây dựng gói theo yêu cầu.

Bạn có thể tận dụng các khả năng của CDN của Dịch vụ 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ối 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ủa bạn có thể tự động tải gói từ máy chủ gần nhất. Đây là cách tiếp cận ưa thích.

Để 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 với cá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 của mình 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 mở rộng để lưu trữ dữ liệu vào bộ nhớ đệm trong Cloud Storage nếu không muốn sử dụng Firebase Hosting. 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 khách hàng

Tiếp theo, bạn có thể sử dụng gói có API loadBundle của SDK Cloud Firestore. Trước tiên, gói cần phải được tả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 bạn đã 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 máy khách 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);

ID truy vấn được xác định là khóa của từng định nghĩa thuộc tính queries (xem bên dưới).