Почему новая версия Service Worker не активируется
Вопрос
Вы выкатили новую версию sw.js. В DevTools она в статусе waiting, а страницы обслуживает старая. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Новая версия ждёт, пока закроются все вкладки под старойправильный ответ
- Браузер проверяет обновление SW только раз в сутки по таймеру
- Новая версия упала с ошибкой в
installи теперь ждёт повтора - Нужно вручную очистить Cache Storage, иначе старая не уйдёт
Разбор
По умолчанию новая версия после install ждёт, пока не останется клиентов старой. Это защищает открытые вкладки от смены логики посреди работы. Ускорить можно через self.skipWaiting() и clients.claim(). Если бы install упал, версия не дошла бы до waiting. Браузер проверяет обновление при навигации, не раз в сутки. Кеш на активацию не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Scope Service Worker по умолчанию
Следующий вопрос
Transferable: передача ArrayBuffer в воркер