Что могут сделать работники службы, которых не имеют эти веб-работники?

Что могут сделать работники службы, которых не имеют эти веб-работники? Или наоборот?

Похоже, что веб-работники являются подмножеством функциональности рабочих-служб. Это верно?

Ответ 1

Существует большая разница в том, для чего они предназначены:

Веб-рабочие

Веб-рабочие предоставляют простые средства для веб-контента для запуска сценариев в фоновом потоке. Рабочий поток может выполнять задачи без вмешательства в пользовательский интерфейс. Кроме того, они могут выполнять операции ввода-вывода с использованием XMLHttpRequest (хотя атрибуты responseXML и channel всегда равны нулю). После создания рабочий может отправлять сообщения на код JavaScript, который его создал, отправив сообщения обработчику событий, указанному этим кодом (и наоборот).

Источник - использование веб-работников

Сервисный рабочий

Служащие службы фактически действуют как прокси-серверы, которые находятся между веб-приложениями, а также браузером и сетью (если доступны). Они предназначены для (помимо прочего) создания эффективного автономного опыта, перехвата сетевых запросов и принятия соответствующих мер на основе доступности сети и обновления активов на сервере. Они также позволят доступ к push-уведомлениям и API-интерфейсам фоновой синхронизации.

Источник - API-интерфейс рабочего стола

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

Ответ 2

Ответ Buksy верен, но, на мой взгляд, он не отвечает на первоначальный вопрос, а именно: "Что могут обслуживать рабочие, которых веб-работники не могут? Или наоборот?"

Существуют фундаментальные различия в их жизненном цикле и количестве экземпляров на каждое происхождение, которое вы можете иметь. Вкратце:

               | Web Workers  | Service Workers  |
|--------------|--------------|------------------|
| Instances    | Many per tab | One for all tabs |
| Lifespan     | Same as tab  | Independent      |
| Intended use | Parallelism  | Offline support  |

Ответ Buksy - это в основном последний ряд таблицы. Кредит: я взял эту таблицу из Demystifying Web Workers и Service Workers Ноланом Лоусоном, начиная со слайда 35.

В частности, вот как вы создаете и прекращаете работу веб-работников:

Использование веб-работников

тогда как работники сферы услуг имеют собственный жизненный цикл, который, по общему признанию, является их "самой сложной частью":

Жизненный цикл работника службы

Таким образом, жизненный цикл - одно фундаментальное различие между ними (следствие их предполагаемого использования).

Раньше существовала огромная разница в поддержке браузеров: рабочие службы вообще не были доступны в Safari для iOS до 11.3 (2018 29 марта), см. Могу ли я использовать сервис-работников? Напротив, веб-работники имели гораздо лучшую поддержку браузера уже в 2012 году: могу ли я использовать веб-работников?

Есть тонкие различия в их поддержке API в браузерах, см. Worker Test (5). В конкретном браузере один вид работника может поддерживать определенный вызов API, а другой - нет. Посетите эту страницу и протестируйте собственный браузер!