Я использую sw-precache
вместе с sw-toolbox
, чтобы разрешить автономный просмотр кэшированных страниц приложения Angular.
Приложение обслуживается через экспресс-сервер node.
Одна из проблем, с которой мы столкнулись, заключается в том, что index.html
иногда кажется, что не обновляется в кеше, хотя другие ресурсы были обновлены при активации нового сервис-воркера.
В результате у пользователей остается устаревший index.html
, который пытается загрузить уже не существующий ресурс с версией в данном случае /scripts/a387fbeb.modules.js
.
Я не совсем уверен, что происходит, потому что кажется, что в разных браузерах, где index.html
был правильно обновлен, есть один и тот же хеш.
В одном браузере устаревший (проблемный) Index.html
(кешируется с хешем 2cdd5371d1201f857054a716570c1564
) включает:
<script src="scripts/a387fbeb.modules.js"></script>
по своему содержанию. (этого файла больше нет в кеше или на удаленном компьютере).
В другом браузере обновил (хорошо) index.html
(кэшируется с тем же 2cdd5371d1201f857054a716570c1564
) включает:
<script src="scripts/cec2b711.modules.js"></script>
У этих двух одинаковый кеш, хотя контент, возвращаемый браузерам, отличается!
Что мне делать с этим? Означает ли это, что sw-precache
не гарантирует сброс атомарного кеша при активации нового ПО? Как от этого защититься?
Если это помогает, то это сгенерированный файл service-worker.js из sw-precache
.
Примечание. Я понимаю, что могу использовать remoteFirst
стратегию (по крайней мере, index.html
), чтобы избежать этого. Но я все же хотел бы понять и выяснить, как использовать cacheFirst
стратегию, чтобы получить максимальную отдачу от производительности.
Примечание 2. В других связанных вопросах я видел, что можно изменить имя кеша, чтобы принудительно удалить весь старый кеш. Но это, кажется, превосходит идею sw-precache
отбирать только обновленный контент? Это путь?
Примечание 3: обратите внимание, что даже если я сильно перезагружу браузер, где веб-сайт не работает. Сайт будет работать, потому что он пропустит кеш сервис-воркера, но кеш все равно будет неправильным - сервис-воркер, похоже, не активируется - я предполагаю, потому что этот конкретный SW был уже активирован, но не смог правильно очистить кеш. При последующих посещениях без жесткого обновления по-прежнему будет отображаться неработающий index.html
.