Может ли Angular 5 Service Worker получать активы в фоновом режиме

Я использую прогрессивные веб-приложения, использующие Angular 5. У нас есть CMS, которая обеспечивает сырой JSON для нашего приложения. Для содержимого с изображениями JSON содержит URL-адреса изображений, находящихся на нашем сервере. Я могу получить из нашей CMS список всех изображений (или отфильтрованный список по условиям).

Имеет ли смысл извлекать этот список URL изображений с помощью команды fetch, и Service Worker заблаговременно кэширует эти ресурсы? Если да, то может ли реализация Service Worker в Angular 5 быть настроена для обработки сценария выборки в фоновом режиме? Или мне нужно создать сервисного работника вручную, чтобы получить список URL-адресов для графических ресурсов и затем кэшировать их?

1 ответ

Решение

Вы можете предварительно загружать или загружать свои ресурсы с помощью NGSW, как описано здесь.

Похоже, вы заинтересованы в предварительной загрузке своих ресурсов с компромиссом увеличения пропускной способности и дискового пространства заранее. При правильном управлении это определенно хороший компромисс, позволяющий быстрее и плавнее работать с пользователем во время выполнения.

Но как вы определяете свой актив здесь немного сложно. Ваши списки активов извлекаются динамически с использованием файла JSON. SW кэширует ваши активы при явном обращении к ним. Если ваш JSON возвращает список изображений, вы можете сделать кэш SW, содержащий данные JSON, и извлекать изображения в JSON - это не типичный случай использования SW, и поэтому для NGSW.

Вы все еще можете достичь этого, хотя и немного по-другому. Поскольку ваша среда выполнения решает, какие изображения являются допустимыми для пользовательского сеанса / любых других условий, вы можете вернуть эти активы в виде предварительно обработанной html-страницы(представьте... ответ) вместо JSON и добавить этот фрагмент HTML на домашнюю страницу и установить видимость, чтобы быть скрытым. Это позволяет SW естественно кэшировать ваши динамически определенные / производные активы.

Обновление: Явный кеш по URL, если вы не предпочитаете помещать изображения в DOM(может быть хорошей идеей не помещать в DOM, когда список изображений огромен)

Вы можете точно кэшировать некоторые конкретные URL-адреса, используя некоторую логику (вызов JSON и ответ в вашем случае), поместив обещание в SW, как здесь и здесь. Документация по sw-test находится здесь, где вы найдете точный пример использования URL-адресов кэширования в ответе JSON.

Другие вопросы по тегам