Workbox предоставляет мощный механизм для кэширования ресурсов с помощью precache, который позволяет заранее загружать и хранить критически важные файлы приложения. Однако при работе с precache существуют ограничения, связанные с объёмом кэшируемых данных и оптимальной производительностью. Понимание этих ограничений важно для предотвращения проблем с доступностью приложения и загрузкой ресурсов.
Каждый файл, добавляемый в precache, имеет ограничение по размеру, которое зависит от браузера и его возможностей по работе с Service Worker Cache API. На практике рекомендуется:
Это ограничение напрямую связано с тем, что браузеры хранят кэш в пределах квоты дискового пространства для сайта. Превышение квоты приводит к неудачам установки Service Worker или автоматическому удалению старых кэшей.
Workbox сам по себе не накладывает жёстких ограничений на общий объём precache, но браузеры имеют встроенные лимиты:
Если precache превышает доступную квоту, Service Worker может не завершить установку, что приведёт к тому, что приложение будет работать без кэшированных ресурсов.
Workbox не накладывает ограничений на количество ресурсов, которые можно добавить в precache, но на практике:
Рекомендуется объединять мелкие скрипты и стили в бандлы, чтобы уменьшить количество кэшируемых объектов.
Precache большого объёма напрямую влияет на:
Оптимизация заключается в разделении ресурсов на precache и runtime cache. Критические для работы приложения ресурсы помещаются в precache, остальные загружаются по мере необходимости.
Хотя Workbox не блокирует добавление больших файлов, можно использовать конфигурацию и фильтры:
import { precacheAndRoute } from 'workbox-precaching';
// Игнорировать файлы больше 5 МБ
const MAX_SIZE = 5 * 1024 * 1024;
precacheAndRoute(
self.__WB_MANIFEST.filter(entry => entry.size <= MAX_SIZE)
);
entry.size может быть задан вручную при генерации
манифеста.Также возможно использовать runtime caching для больших файлов, например, видео, изображения или библиотек третьих сторон.
Эти ограничения помогают поддерживать стабильность работы приложения, предотвращают превышение квот браузера и обеспечивают быструю установку Service Worker, что критически важно для производительности современных PWA.