Разница между веб-сокетами, веб-работниками и сервисными работниками PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Разница между веб-сокетами, веб-воркерами и сервис-воркерами

Веб-сокеты, веб-воркеры, сервис-воркеры… эти термины вы, возможно, читали или слышали. Может быть, не все из них, но, вероятно, по крайней мере один из них. И даже если вы хорошо разбираетесь во фронтенд-разработке, есть большая вероятность, что вам нужно посмотреть, что они означают. Или, может быть, вы похожи на меня и время от времени смешиваете их. Все термины выглядят и звучат ужасно похоже, и их действительно легко запутать.

Итак, давайте разберем их вместе и выделим веб-сокеты, веб-воркеры и сервис-воркеры. Не в будничном смысле, когда мы глубоко погружаемся и получаем практический опыт с каждым — больше как маленький помощник, чтобы добавить в закладки в следующий раз. I вам нужно освежить.

Краткая справка

Мы начнем с общего обзора для быстрого сравнения и противопоставления.

Особенность Что это
Веб-сокет Устанавливает открытое и постоянное двустороннее соединение между браузером и сервером для отправки и получения сообщений по одному соединению, инициированному событиями.
Веб-воркер Позволяет запускать сценарии в фоновом режиме в отдельных потоках, чтобы предотвратить блокировку сценариев друг другом в основном потоке.
Сервис работник Тип Web Worker, создающий фоновую службу, выполняющую промежуточную функцию для обработки сетевых запросов между браузером и сервером даже в офлайн-ситуациях.

Веб-сокеты

Веб-сокет — это протокол двусторонней связи. Думайте об этом как о продолжающемся звонке между вами и вашим другом, который не прекратится, пока один из вас не решит повесить трубку. Единственная разница в том, что вы являетесь браузером, а ваш друг — сервером. Клиент отправляет запрос на сервер, а сервер отвечает, обрабатывая запрос клиента и наоборот.

Разница между веб-сокетами, веб-воркерами и сервис-воркерами

Коммуникация основана на событиях. А WebSocket объект устанавливается и подключается к серверу, а сообщения между сервером инициируют события, которые отправляют и получают их.

Это означает, что при установлении начального соединения у нас есть взаимодействие клиент-сервер, при котором соединение инициируется и поддерживается до тех пор, пока клиент или сервер не решат разорвать его, отправив сообщение CloseEvent. Это делает веб-сокеты идеальными для приложений, которым требуется непрерывная и прямая связь между клиентом и сервером. Большинство определений, которые я видел, вызывают приложения чата в качестве общего варианта использования — вы вводите сообщение, отправляете его на сервер, запускаете событие, и сервер отвечает данными без необходимости снова и снова пинговать сервер.

Рассмотрим этот сценарий: вы собираетесь уходить и решили включить Google Maps. Вы, вероятно, уже знаете, как работают Google Maps, но если вы этого не знаете, оно автоматически определяет ваше местоположение после подключения к приложению и отслеживает его, куда бы вы ни пошли. Он использует передачу данных в режиме реального времени, чтобы отслеживать ваше местоположение, пока это соединение активно. Это веб-сокет, устанавливающий постоянный двусторонний диалог между браузером и сервером, чтобы поддерживать эти данные в актуальном состоянии. Спортивное приложение с результатами в реальном времени также может использовать веб-сокеты таким образом.

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

Существуют инструменты и службы, помогающие устанавливать и поддерживать соединения через веб-сокеты, в том числе: Кластер сокетов, АсинхронныйAPI, ковбой, Король веб-сокетов, каналыи Горилла веб-сокет. У MDN есть текущий список, который включает другие услуги.

Дополнительная информация о веб-сокетах

Веб-воркеры

Рассмотрим сценарий, в котором вам нужно выполнить кучу сложных вычислений, одновременно внося изменения в DOM. JavaScript — это однопоточное приложение, и выполнение более одного сценария может нарушить пользовательский интерфейс, в который вы пытаетесь внести изменения, а также выполнить сложные вычисления.

Здесь в игру вступают веб-воркеры.

Web Workers позволяют запускать сценарии в фоновом режиме в отдельных потоках, чтобы предотвратить блокировку сценариев друг другом в основном потоке. Это делает их идеальными для повышения производительности приложений, требующих интенсивных операций, поскольку эти операции могут выполняться в фоновом режиме в отдельных потоках, не влияя на пользовательский интерфейс при рендеринге. Но они не так хороши в доступе к DOM, потому что, в отличие от веб-сокетов, веб-воркер работает вне основного потока в своем собственном потоке.

Web Worker — это объект, который выполняет файл сценария с помощью Worker объекта для выполнения задач. И когда мы говорим о работниках, они, как правило, делятся на один из трех типов:

  • Преданные работники: Выделенный работник доступен только сценарию, который его вызывает. Он по-прежнему выполняет задачи типичного веб-работника, такие как многопоточные сценарии.
  • Общие рабочие: Общий работник — это противоположность преданного работника. К нему можно получить доступ из нескольких сценариев, и он может выполнять практически любую задачу, которую выполняет веб-воркер, если они существуют в том же домене, что и рабочий.
  • Работники службы: Service Worker действует как сетевой прокси между приложением, браузером и сервером, позволяя запускать сценарии даже в случае отключения сети. Мы собираемся добраться до этого в следующем разделе.

Дополнительная информация о веб-воркерах

Рабочие службы

Есть некоторые вещи, которые мы как разработчики не можем контролировать, и одна из таких вещей — сетевое подключение пользователя. К какой бы сети ни подключался пользователь, она и есть. Мы можем только сделать все возможное, чтобы оптимизировать наши приложения, чтобы они работали как можно лучше при любом используемом соединении.

Сервисные работники — это одна из вещей, которые мы можем сделать для постепенного повышения производительности приложения. Service Worker находится между приложением, браузером и сервером, обеспечивая безопасное соединение, которое работает в фоновом режиме в отдельном потоке благодаря, как вы уже догадались, Web Workers. Как мы узнали из предыдущего раздела, сервис-воркеры — это один из трех типов веб-воркеров.

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

Значок шестеренки с надписью Service Worker между значком браузера с надписью client и значком облака с надписью server.
Разница между веб-сокетами, веб-воркерами и сервис-воркерами

Это основная движущая сила того, что часто называют «офлайн-сначала» разработка. Мы можем хранить активы в локальном кеше, а не в сети, предоставлять важную информацию, если пользователь выходит из сети, выполнять предварительную выборку данных, чтобы они были готовы, когда они потребуются пользователю, и предоставлять запасные варианты в ответ на сетевые ошибки. Они полностью асинхронны, но, в отличие от веб-сокетов, у них нет доступа к DOM, поскольку они работают в своих собственных потоках.

Еще одна важная вещь, которую нужно знать о Service Workers, это то, что они перехватывают каждый запрос и ответ от вашего приложения. Как таковые, они имеют некоторые последствия для безопасности, в первую очередь то, что они следуют политике одного и того же происхождения. Таким образом, это означает отсутствие запуска сервисного работника из CDN или стороннего сервиса. Для них также требуется защищенное HTTPS-соединение, а это значит, что для их работы вам понадобится SSL-сертификат.

Дополнительная информация о сервисных работниках

Подведение итогов

Это очень подробное объяснение различий (и сходств) между веб-сокетами, веб-воркерами и сервис-воркерами. Опять же, терминология и понятия достаточно похожи, чтобы их можно было смешивать друг с другом, но, надеюсь, это даст вам лучшее представление о том, как их различать.

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

Особенность Что это Многопоточный? HTTPS? Доступ к ДОМУ?
Веб-сокет Устанавливает открытое и постоянное двустороннее соединение между браузером и сервером для отправки и получения сообщений по одному соединению, инициированному событиями. Работает в основном потоке Не требуется Да
Веб-воркер Позволяет запускать сценарии в фоновом режиме в отдельных потоках, чтобы предотвратить блокировку сценариев друг другом в основном потоке. Работает в отдельном потоке необходимые Нет
Сервис работник Тип Web Worker, создающий фоновую службу, выполняющую промежуточную функцию для обработки сетевых запросов между браузером и сервером даже в офлайн-ситуациях. Работает в отдельном потоке необходимые Нет

Отметка времени:

Больше от CSS хитрости