Расширение Firestore Bundle Builder ( firestore-bundle-builder ) развертывает HTTP-функцию, которая предоставляет пакеты данных Cloud Firestore . Вы определяете пакеты в документах Firestore, а расширение предоставляет статические бинарные файлы данных через HTTP-запросы, а также различные встроенные механизмы кэширования с использованием CDN Firebase Hosting или Cloud Storage. Если пакет отсутствует или срок действия существующих пакетов истек, эта функция создаст и кэширует новый пакет по запросу.
Для использования этого расширения необходимо сначала создать одну или несколько спецификаций пакета в Firestore, используя панель администратора расширения. Спецификация пакета определяет именованные запросы (запросы к коллекциям и конкретные пути к документам, которые нужно добавить в пакет).
Внутри спецификации пакета вы также можете определить параметры, предназначенные для использования в именованных запросах. Значения для этих параметров задаются с помощью параметров запроса URL при вызове функции HTTP.
По ссылке выше вы найдете инструкции по локальному запуску административных утилит. После настройки веб-приложения перейдите по адресу localhost:3000, чтобы создать спецификацию с помощью пользовательского интерфейса:

Создание и предоставление пакета
После установки расширения и создания спецификации пакета вы можете начать сборку и обслуживание пакетов, вызывая HTTP-конечную точку, предоставляемую расширением.
В зависимости от спецификации пакета, запрошенный пакет может быть возвращен из кэша клиента, кэша Firebase Hosting или файла Cloud Storage. Когда срок действия всех кэшей истечет, новый запрос к серверу запустит запросы Firestore для создания пакета по требованию.
Вы можете воспользоваться возможностями CDN Firebase Hosting, настроив сайт Firebase Hosting, который будет указывать на функцию serve с помощью правила перезаписи. CDN реплицирует ваш пакет на множество разных серверов, так что ваши пользователи смогут автоматически загружать пакет с ближайшего сервера. Это предпочтительный подход.
Для настройки этого в Firebase Hosting создайте или отредактируйте файл firebase.json со следующим содержимым и разверните сайт :
{
"hosting": {
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "/bundles/*",
"function": "ext-firestore-bundle-builder-serve"
}
]
}
}
После развертывания вы можете получить доступ к своим пакетам из CDN, используя URL вашего сайта. Например: https://your-site-url.com/bundles/:bundleId .
В качестве альтернативы, если вы не хотите использовать Firebase Hosting, вы можете настроить расширение для кэширования данных в Cloud Storage. В этом случае вам нужно будет напрямую вызвать развернутую HTTP-функцию для генерации пакетов.
Интеграция с клиентом
Далее вы можете использовать пакет с помощью API loadBundle из SDK Cloud Firestore. Сначала пакет необходимо загрузить, а затем передать в SDK. Например:
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);
После загрузки вы можете использовать данные из пакета:
Если при определении пакета вы указали массив путей к документам, вы сможете получить данные документа на своем клиенте через этот пакет:
import { getFirestore, doc, getDocFromCache } from "firebase/firestore";
// Bundle Document IDs: ['users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2']
const ref = doc(getFirestore(), "users/92x1NgSWYKUC4AG4s2nHGMR2ikZ2");
const snapshot = await getDocFromCache(ref);
Если вы указали запросы, вы можете использовать API namedQuery для выполнения запроса из пакета:
import { getFirestore, namedQuery } from "firebase/firestore";
const query = await namedQuery(getFirestore(), "queryId");
const snapshot = await getDocsFromCache(query);
Идентификаторы запросов определяются как ключ каждого определения свойства queries (см. ниже).