Chrome - изображения исчезают из кеша через несколько часов - PullRequest
1 голос
/ 19 июня 2019

У меня есть веб-сайт, который используется в качестве приложения для киоска.В режиме онлайн я предварительно загружаю данные и изображения из WordPress API и сохраняю изображения в кэш-памяти.Работник службы перехватывает http, попадает к этим изображениям и вместо этого передает данные в кэш.Таким образом, приложение может работать в автономном режиме (включая вызовы API).

Но после нескольких часов автономной работы (обычно около 6 часов) некоторые изображения исчезают из кеш-памяти.И это всегда одни и те же.

Но не все.Любая идея, где я должен проверить, чтобы увидеть, что идет не так?

Ответы [ 3 ]

0 голосов
/ 09 июля 2019

Как вы настроили Cache-Control?Те, которые постоянно удаляются, могут быть настроены как max-age.

. Тем не менее рекомендуется настроить заголовки Cache-Control на веб-сервере, даже если вы знаете, что используете хранилище кэша.API.Обычно вы можете обойтись без настройки Cache-Control: no-cache для неверсионных URL-адресов и / или Cache-Control: max-age = 31536000 для URL-адресов, которые содержат информацию о версиях, например хэши.

какуказано в https://web.dev/service-workers-cache-storage

Кроме того, у вас должен быть чековый объем кеш-памяти.(https://developers.google.com/web/tools/chrome-devtools/storage/cache) Даже они утверждают, что либо все кэши удалены, либо ни один из них, так как в настоящее время это экспериментальная технология, нормально относиться к этому вопросу с подозрением.

Вы такжеотвечает за периодическую очистку записей кэша. Каждый браузер имеет жесткое ограничение на объем хранилища кэша, который может использовать данный источник. Оценки использования квоты кэша доступны через API StorageEstimate. Браузер делает все возможное для управления дисковым пространством, но можетудалите хранилище Cache для источника. Браузер обычно удалит все данные для источника или ни одного из данных для источника. Убедитесь, что версии кэшируются по имени и используют кэши только из версиисценария, над которым они могут безопасно работать. Дополнительные сведения см. в разделе Удаление старых кэшей.

, как указано в https://developer.mozilla.org/en-US/docs/Web/API/Cache

0 голосов
/ 10 июля 2019

Сервисные работники используют 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);
                }
              }));
            })

Еще пара вопросов:

  1. Есть ли у вас какая-либо бизнес-логика в SW, связанная с кэшированием изображений?
  2. Не могли бы вы получить какую-либо информацию, используя методы storageQuota, чтобы увидеть доступную квоту и использование? Это может быть очень полезно понять, если изображения выселены из-за достижения предела. (даже если установить флажок для сохранения, вы не на 100% уверены, что активы сохранены)

Из "Построения PWAs" (o'Reilly - Tal Alter):

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

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

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

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


Если интересно, я написал статью на эту тему здесь .

Вы можете пометить свой блок хранения данных (он же «box») как «постоянный», чтобы пользовательский агент сохранял его как можно дольше (более подробно см. Ссылку на API хранилища выше).

0 голосов
/ 07 июля 2019

Причин такой очистки кеша может быть две: либо ваше хранилище переполнится (chrome localStorage), так что оно станет ясным ИЛИ проверьте, истекает ли длина данных, отправляемых с сервера, проверьте заголовки, которые могут дать вампонимание времени, которое требуется для истечения срока действия.

А чтобы проверить, удаляются ли данные из хранилища, попробуйте протестировать свой веб-сайт в браузере Safari или Edge, где такое выселение не происходит.

...