Выбор ответа Middle Web API и воркеры обновлено

Почему новая версия Service Worker не активируется

Вопрос

Вы выкатили новую версию sw.js. В DevTools она в статусе waiting, а страницы обслуживает старая. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Новая версия ждёт, пока закроются все вкладки под старой. По умолчанию новая версия после install ждёт, пока не останется клиентов старой.

Варианты ответа

  1. Новая версия ждёт, пока закроются все вкладки под старойправильный ответ
  2. Браузер проверяет обновление SW только раз в сутки по таймеру
  3. Новая версия упала с ошибкой в install и теперь ждёт повтора
  4. Нужно вручную очистить Cache Storage, иначе старая не уйдёт

Разбор

По умолчанию новая версия после install ждёт, пока не останется клиентов старой. Это защищает открытые вкладки от смены логики посреди работы. Ускорить можно через self.skipWaiting() и clients.claim(). Если бы install упал, версия не дошла бы до waiting. Браузер проверяет обновление при навигации, не раз в сутки. Кеш на активацию не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме