ServiceWorkerRegistration # установка значений при повторном посещении? - PullRequest
0 голосов
/ 13 февраля 2020
navigator.serviceWorker.register('/sw.js').then((reg)=>{
            console.log(reg.installing, " installing");  
            console.log(reg.waiting, " waiting"); 
            console.log(reg.active, " active") 
            reg.addEventListener('updatefound', function(){
                console.log("update found", reg.installing); 
            })
})

Случай A) Допустим, пользователь впервые заходит на мой сайт. reg.installing печатает worker объект. reg.waiting и reg.active не определено, что понятно. updatefound запускается немедленно, а reg.installing - тот же работник, что и выше. Все хорошо.

Случай B) Я обновил SW-код и развернул его. при обновлении страницы reg.installing печатает неопределенно. Вопрос 1) Почему не определено? при обновлении появляется новый работник сервиса, но reg.installing не определено. в случае A, когда браузер зашел на сайт, должен был быть установлен новый работник сервиса, поэтому reg.installing не был неопределенным.

Мое предположение: по моему мнению, в случае B) then promise block произошло Быстрее, чем браузер, фактически сравнивал старый с новым, поэтому, когда это произошло, браузер вообще не имел reg.installing. а в случае А, поскольку это был первый раз, браузеру не нужно было ничего сравнивать, и он был достаточно быстр, чтобы поместить worker в reg.installing.

Вопрос 2) делает мое предположение имеет смысл?

1 Ответ

0 голосов
/ 14 февраля 2020

Я бы настоятельно рекомендовал прочитать " Service Worker Lifecycle " для более подробной информации.

Жизненный цикл Service Service происходит независимо от каких-либо действий на страницах клиента и во время выполнения вашего кода, да, вполне возможно, что обновленный работник сервиса перешел из состояния installing в состояние waiting (или active, если вы вызвали skipWaiting()).

Так что да, ваше предположение звучит так, как будто оно в основном будет правильным.

...