JavaScript (PWA) - Как правильно инициализировать работника службы? - PullRequest
0 голосов
/ 07 января 2019

Каков лучший способ инициализации работника службы, используемого для кэширования PWA?

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

if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('sw.js').then(registration => {
      // Registration success
    }, function(err) {
      // Registration failed
    });
  });
}

Способ 2: В этом случае я проверяю, что там уже зарегистрировано ПО, и я устанавливаю регистрацию нового, только если оно не зарегистрировано.

if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.getRegistrations().then(registrations => {
      const isServiceWorkerNotRegistered = registrations.length === 0;

      if (isServiceWorkerNotRegistered) {
          navigator.serviceWorker.register('sw.js').then(registration => {
              // Registration success
          }).catch(error => {
              // Registration failed
          });
      } else {
          console.log('Service worker already registered.');
      }
    });
  });
}

Кроме того ... Действительно ли необходимо ждать загрузки окна (строка 2)? Поскольку SW работает в браузере асинхронно, я думаю, мне не нужно, чтобы приложение полностью загружалось.

1 Ответ

0 голосов
/ 07 января 2019

Ожидание события load означает, что ресурсы, загружаемые работником службы, не используют полосу пропускания и ресурсы устройства для рендеринга текущей запрашиваемой страницы. См. улучшение шаблона .

Для регистрации вопроса используйте простую первую версию.

Если вы не измените URL-адрес служебного сценария, navigator.serviceWorker.register () фактически не будет использоваться при последующих посещениях.

последующие посещения

Если работник службы не зарегистрирован, register зарегистрирует его. Если работник службы уже зарегистрирован, register в основном ничего не сделает.

...