Я работал над преобразованием веб-приложения, которое у нас есть, в PWA, и я использую Google Workbox (v3.6.1) для предварительного кэширования ресурсов.По большей части это работает хорошо, но, похоже, существует особый сценарий, который приводит к тому, что кэшированные файлы перестают синхронизироваться.
Я использую базовую функциональность precacheAndRoute()
для настройки файлов дляпредварительное кэширование.
workbox.precaching.precacheAndRoute([]); //populated at build time via workbox-cli
При первой установке и большинстве обновлений файлы предварительно кэшируются, как и ожидалось.Однако если экземпляр Service Worker в настоящее время waiting
и новое обновление установлено, все ожидающие файлы во временном кэше удаляются и не устанавливаются с самой новой версией.
Кажется,что шаг установки workbox.precaching
обновил IndexDB, которая содержит все версии файлов, когда он добавляет файлы во временный кэш.Поэтому следующая версия Service Worker считает, что предыдущая последняя версия всех файлов в настоящее время кэшируется, хотя они все еще находятся только во временном кэше.Затем новая установка удаляет все из временного кэша перед вставкой своих файлов.Таким образом, ожидающие кэшированные файлы для предыдущего экземпляра waiting
будут потеряны навсегда.
У меня была идея, что при установке новой версии я могу принудительно синхронизировать временный кэш с постоянным (используя PrecacheController и функция activate()
), прежде чем разрешить новому экземпляру выполнять предварительную кэш, но у меня есть некоторые опасения по поводу обновления постоянного кэша, пока пользователь активно использует приложение.
Яищу либо подтверждение того, что моя идея здесь является подходящим решением, либо любые другие предложения о том, как справиться с этим сценарием.