Установить кеш для файлов в Firebase Storage
У меня PWA работает на Firebase. Мои файлы изображений размещены в Firebase Storage. Я заметил, что мой браузер не сохраняет кэш для файлов, загруженных из системы хранения. Браузер запрашивает файлы для каждого обновления страницы. Это вызывает ненужную задержку и трафик.
Мой JS-скрипт загружает файлы по ссылке для скачивания в Firebase Storage, например: https://firebasestorage.googleapis.com/v0/b/discipulado-7b14b.appspot.com/o/book3.png?alt=media&token=65b2cde7-c8a4-45da-a743-401759663c17.
Могу ли я кешировать эти запросы?
ОБНОВИТЬ
Согласно этому ответу, я не должен использовать Firebase Storage для размещения файлов с моего сайта. Просто для управления загрузками и загрузками от пользователей. Это правильно?
6 ответов
cacheControl
для хранения: https://firebase.google.com/docs/reference/js/firebase.storage.SettableMetadata
Вы будете лучше работать с хостингом, а развертывание с помощью Firebase CLI предельно просто. Я думаю, что по умолчанию Cache-Control для изображений в хостинге составляет 2 часа, и вы можете увеличить его глобально с помощью.json.
https://firebase.google.com/docs/hosting/full-config
Хостинг может масштабировать ваш сайт и перемещать его в разные конечные узлы ближе к тому месту, где есть спрос. Хранение ограничено ведрами, но вы можете указать ведро для Европы, одно для Китая, для Северной Америки и т. Д.
Хранилище лучше для загрузки пользовательских файлов, а хостинг - для статического контента (хотя я думаю, что они разворачивают динамический хостинг с облачными функциями)
Собираем части для любых будущих ссылок здесь
Первый,
// Create file metadata to update
var newMetadata = {
cacheControl: 'public,max-age=4000',
}
Потом,
storageRef.put(file, newMetadata)
storageRef.updateMetadata(yourMetadata)
может быть решением, которое вам нужно.
https://firebase.google.com/docs/storage/web/file-metadata
или же
storageRef.put(file, yourMetadata)
Кроме того, можно изменить управление кешем существующего ресурса, обращающегося к Google Cloud Console. (Таким образом, не нужно повторно загружать метаданные кеша)
Получите доступ к консоли и перейдите в «Облачное хранилище». Перейдите к своей корзине и файлу, где вы найдете «редактировать метаданные».
Здесь вы можете поместить политику управления кешем:
Чтобы дополнить ответ, вы также можете использовать работника службы, возможно, с рабочей коробкой, с cacheFirst
стратегия для кэширования всех изображений в браузере пользователя. Затем, после первого кэша, изображения будут сначала загружаться из локального кэша.
Если кеша нет, то изображения будут запрашиваться из Firebase Storage, где изображения также можно кэшировать, если вы указали cacheControl
свойство в метаданных файла или если вы используете Firebase Hosting с пользовательским заголовком Cache-Control
для изображений.
Используйте Serviceworker для этого.
Вы можете сохранить URL без токена в кеше и получить их позже.
Таким образом, изменение токенов не повлияет на кеширование.
Для кеширования без токена используйте что-то вроде
cacheUrl = url.origin + url.pathname.substr(0, url.pathname.length - urlPath.length) + urlPath;
а потом cache.put(cacheUrl, response);