Как на самом деле работает событие извлечения работника службы? - PullRequest
0 голосов
/ 14 июня 2019

Работник пользовательского сервиса, предварительно кэшированный с помощью плагина webpack рабочего пакета в Vue-CLI версии 3, кажется нестабильным, когда слышит события выборки.

Этот работник службы использовался в предыдущей версии этого приложения без рабочего ящика и установленного VueJS, и его поведение было более согласованным.

Так в чем же проблема? Проблема в том, что работник сервиса не будет слышать никаких событий извлечения, пока страница сайта не будет перезагружена, НО сайт может быть переведен в автономный режим после некоторой навигации по нему, и кэшированные файлы обслуживаются так, как если бы он был служащим сервиса их. Теоретически сервисный работник не слышит события извлечения, потому что журналы в консоли, которые должны запускаться в этом прослушивателе событий, никогда не отображаются.

Когда страница обновляется, работник службы начинает слышать события выборки, как и следовало ожидать, и вы можете увидеть журналы в консоли.

Что здесь происходит? В предыдущей версии приложения, если работник службы не мог услышать событие извлечения, я получил страницу с ошибкой.

Я просмотрел плагин workbox и документацию по Vue CLI, но ничего не вижу по этому поводу. Я понимаю, что вы можете настроить сервисного работника так, чтобы он сразу требовал клиента, что я и буду делать дальше, чтобы решить проблему «только при перезагрузке», но мой вопрос не связан с этим.

Работник службы находится в корне общедоступного каталога, файлы предварительно кэшированы и существуют в том месте, где вы ожидаете, и т. Д.

Внутри файла vue.config.js:

pwa : {
    ...
    workboxOptions : {
      swSrc : './src/service-worker.js'
    },
    workboxPluginMode : 'InjectManifest'
  }

Событие извлечения внутри service-worker.js:

self.addEventListener('fetch', e => {
    console.log('[Service Worker] in process of fetching');
    console.log(e.request.url);
    // .... doStuff();
});

Workbox обрабатывает фактическую регистрацию работника службы, поэтому после монтирования основного компонента Vue работник службы уже завершил установку и активацию.

Я ожидаю, что если работник службы не сможет слышать события извлечения до перезагрузки, то даже после перехода по сайту и перевода его в автономный режим приложение будет вести себя как обычное веб-приложение и работать с ошибками. С другой стороны, если работник службы фактически слышал события выборки, он должен регистрировать эти события в консоли. Фактический результат находится где-то посередине: работник службы не слышит события извлечения, но приложение все еще работает после точки в автономном режиме даже без обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...