Сервисные работники используют Storage API для кэширования активов.
Доступны фиксированные квоты, которые отличаются от браузера к браузеру.
Вы можете получить еще несколько подсказок из своего приложения, используя следующий вызов и проанализировав результаты:
navigator.storageQuota.queryInfo("temporary")
.then(function(info) {
console.log(info.quota);
// It gives us the quota in bytes
console.log(info.usage);
// It gives us the used data in bytes
});
ОБНОВЛЕНИЕ 1
Есть ли у вас где-нибудь метод очистки или логика, которая удаляет старые записи в кэше и в конечном итоге запускается как-то неожиданно? Что-то вроде кода ниже.
caches.keys().then(function(keyList) {
return Promise.all(keyList.map(function(key) {
if (key !== cacheName) {
return caches.delete(key);
}
}));
})
Еще пара вопросов:
- Есть ли у вас какая-либо бизнес-логика в SW, связанная с кэшированием изображений?
- Не могли бы вы получить какую-либо информацию, используя методы
storageQuota
, чтобы увидеть доступную квоту и использование? Это может быть очень полезно понять, если изображения выселены из-за достижения предела. (даже если установить флажок для сохранения, вы не на 100% уверены, что активы сохранены)
Из "Построения PWAs" (o'Reilly - Tal Alter):
Каждый браузер ведет себя по-разному, когда речь идет об управлении CacheStorage, выделении места в кеше для каждого сайта и очистке старых записей в кеше.
В дополнение к ограничению хранилища для сайта (также известного как источник), большинство браузеров также устанавливают ограничение размера для всего кэша. Когда кеш преодолевает это ограничение, браузер удаляет кеши сайта, к которому обращались дольше всего назад (также известный как наименее используемый).
Браузеры никогда не будут удалять только часть кэша вашего сайта. Либо весь кеш вашего сайта будет удален, либо ни один из них не будет. Это гарантирует, что на вашем сайте никогда не будет непредсказуемого частичного кэша.
С учетом последних слов "Браузеры никогда не удаляют только часть кэша вашего сайта". Могу ли я подумать, что, возможно, это не проблема с достигнутым пределом кэша, так как в противном случае все изображений будут удалены в кэше.
Если интересно, я написал статью на эту тему здесь .
Вы можете пометить свой блок хранения данных (он же «box») как «постоянный», чтобы пользовательский агент сохранял его как можно дольше (более подробно см. Ссылку на API хранилища выше).