Разница между клиентами Claim и skipWaiting - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь понять разницу между skipWaiting и clientsClaim.В моем понимании: вызов skipWaiting заставит нового работника сервиса пропустить фазу ожидания и сразу же стать активным.clientsClaim может затем «потребовать» любые другие открытые вкладки.

То, что я собираю из документации в Интернете:

  • skipWaiting пропускает фазу ожидания и становитсяактивен сразу источник

  • clientsClaim немедленно начать контролировать страницы источник

В каждомсообщение, которое я нахожу в Интернете, обычно я всегда вижу, как clientsClaim и skipWaiting используются вместе.

Однако недавно я нашел работника службы, который использует только clientsClaim, и мне трудно обернуть мойобдумайте, в чем на самом деле разница между clientsClaim и skipWaiting, и в каком сценарии вы используете clientsClaim, но не skipWaiting?

Мои мысли об этом иэто может быть, где я ошибаюсь, но это мое понимание этого: этот вызов clientsClaim, а не skipWaiting является избыточным?Учитывая:

  • Новый работник сервиса станет активным, когда все открытые страницы закрыты (потому что мы не используем skipWaiting)
  • Когда наш новый работник сервиса активирован, мыпозвоните по номеру clientsClaim, хотя мы просто закрыли все открытые страницы, чтобы даже активировать нового работника сервиса.Не должно быть других страниц для контроля, потому что мы просто закрыли их.

Может ли кто-нибудь помочь мне понять?

Прочитать документацию по skipWaiting

Прочитайте документацию по clientClaim

Прочитайте о жизненном цикле сервисного работника Джейка Арчибальда и поиграйте с этой демонстрацией

Прочитайте кучу сообщений stackoverflow, автономной кулинарной книги, различных сообщений в блоге и т. Д.

1 Ответ

2 голосов
/ 20 сентября 2019

self.skipWaiting() делает именно то, что вы описали:

заставляет ожидающего работника службы стать активной службой

«Активный» в этом смысле не означает никакогов настоящее время загруженные клиенты сейчас разговаривают с этим сервисом.Вместо этого это означает, что сервис теперь является сервисом, который будет использоваться всякий раз, когда новый клиент запрашивает его.

Здесь Clients.claim() входит:

Когда работник сервиса первоначально зарегистрированстраницы не будут использовать его до следующей загрузки.

Без вызова claim все существующие клиенты будут продолжать общаться со старым работником сервиса до полной загрузки страницы.

Хотя большую часть времени имеет смысл использовать skipWaiting и Clients.claim в сочетании, это не всегда так.Если существует вероятность плохого взаимодействия с пользователем из-за несовместимости с работником сервиса, Clients.claim вызывать не следует.Вместо этого, в следующий раз, когда клиент обновляется или загружается, у него теперь будет новый сервисный работник, не беспокоясь о критических изменениях.

...