Что могут сделать работники службы, которых не имеют эти веб-работники? Или наоборот?
Похоже, что веб-работники являются подмножеством функциональности рабочих-служб. Это верно?
Что могут сделать работники службы, которых не имеют эти веб-работники? Или наоборот?
Похоже, что веб-работники являются подмножеством функциональности рабочих-служб. Это верно?
Существует большая разница в том, для чего они предназначены:
Веб-рабочие
Веб-рабочие предоставляют простые средства для веб-контента для запуска сценариев в фоновом потоке. Рабочий поток может выполнять задачи без вмешательства в пользовательский интерфейс. Кроме того, они могут выполнять операции ввода-вывода с использованием XMLHttpRequest (хотя атрибуты responseXML и channel всегда равны нулю). После создания рабочий может отправлять сообщения на код JavaScript, который его создал, отправив сообщения обработчику событий, указанному этим кодом (и наоборот).
Источник - использование веб-работников
Сервисный рабочий
Служащие службы фактически действуют как прокси-серверы, которые находятся между веб-приложениями, а также браузером и сетью (если доступны). Они предназначены для (помимо прочего) создания эффективного автономного опыта, перехвата сетевых запросов и принятия соответствующих мер на основе доступности сети и обновления активов на сервере. Они также позволят доступ к push-уведомлениям и API-интерфейсам фоновой синхронизации.
Источник - API-интерфейс рабочего стола
Таким образом, веб-рабочие удобны для запуска дорогостоящих сценариев, не заставляя пользовательский интерфейс замораживаться, а рабочие службы полезны для изменения ответа от сетевых запросов (например, при создании автономного приложения).
Ответ 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, а другой - нет. Посетите эту страницу и протестируйте собственный браузер!