Я пытаюсь интегрировать Углового Работника Службы в существующий проект. Если я правильно понял, есть два случая, как данные кэшируются в Угловом SW. Можно предварительно запрограммировать или lazyupdate данные о ресурсе и кэшировать определенные вызовы API и другие запросы XHR.
То, что я пытаюсь достичь, - это загрузить конкретный актив сначала по сети, если запрос запущен в тайм-аут или недоступен, он будет обслуживаться через кеш. Как и стратегия freshness
при вызове API кеширования. Но, похоже, нет никакого способа настроить такой механизм загрузки свежести для JS файла, который загружается как актив в проекте Angular. Я установил пример проекта для тестирования: https://github.com/philipp-schaerer-lambdait/angular-service-worker-test
Следующий пример представляет собой стандартное приложение Angular и не содержит фактический проект, с которым я работаю, но показывает элементы, которые я хотел бы кэшировать, структура выглядит следующим образом:
\_ Angular root
|_ src/
|_ index.html <----------- links to excluded_asset.js
|_ app/
|_ assets/
|_ excluded_asset.js <-- this one is excluded in ngsw-config.json
|_ included_asset.js
|_ ...
Здесь соответствующие конфигурации:
ngsw-config.json
{
"index": "/index.html",
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": ["/favicon.ico", "/index.html", "/*.css", "/*.js"]
}
},
{
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": ["/assets/**", "!/assets/excluded_asset.js"]
}
}
]
}
Возможно ли достичь кэширующего поведения, такого как стратегия freshness
, с помощью installMode
и updateMode
для активов?
Я попытался исключить его из кэша ресурсов, и он был загружен через сеть, но, очевидно, не будет доставлен сервисным работником после выхода в автономный режим.
После этого я попытался включить его снова через dataGroups
и установил стратегию на freshness
но кажется, что актива не будет кэшироваться снова, как только он исключен из конфигурации актива. Также я не думаю, что параметры dataGroups
могут использоваться для этого файла.
"dataGroups": [
{
"name": "config",
"urls": ["assets/excluded_asset.js"],
"cacheConfig": {
"maxSize": 10,
"maxAge": "1d",
"timeout": "100",
"strategy": "freshness"
}
}
}
Я что-то пропустил или нет способа кэшировать актив через стратегию freshness
? Было бы предпочтительнее не перемещать файл или изменять способ запроса файла.
РЕДАКТИРОВАТЬ
Я попытался переместить его за пределы каталогов кэшированных активов и включить его в настройку dataGroups
, также не работал.