В чем разница между Shared Worker и Worker в HTML5?

После прочтения этого сообщения в блоге: http://www.sitepoint.com/javascript-shared-web-workers-html5/

Я не понимаю Какая разница между Worker и SharedWorker?

4 ответа

Решение

Очень основное различие: Worker доступен только из скрипта, который его создал, SharedWorker может быть получен из любого скрипта из того же домена.

Всем, кто рассматривает возможность использования SharedWorker - Apple удалила поддержку SharedWorker от WebKit в 2015 году. В их текущей дорожной карте нет плана для повторной реализации. Поддержка сервисных работников в настоящее время разрабатывается для WebKit и предлагает аналогичные возможности ( см. Здесь для сравнения).

Вы можете следить за развитием (поддержка Safari) Service Workers в WebKit здесь.

Кажется, SharedWorker обладает большей функциональностью, чем Worker.

Среди этой функциональности есть:

  • Общая глобальная область. Все SharedWorker экземпляры имеют общую глобальную область видимости.

W3C Spec:

WHATWG Spec:

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

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

Общий рабочий разрешает всем сценариям контекста первой страницы, который вызывает конструктор: new SharedWorker("путь-к-общему-рабочему-файлу.js"), для совместного использования одного и того же экземпляра общего рабочего файла, запущенного в фоновом контексте (другой поток запущенного javascript сзади).

например, когда веб-страница № 1 вызывает этот конструктор, если обнаруживается, что общий рабочий процесс еще не загружен сзади, это приведет к тому, что фоновый контекст загрузит файл и загрузит его, а затем, когда веб-страница № 2 вызовет тот же конструктор (тот же путь к файлу), он обнаружил, что уже запущен общий воркер, он просто будет использовать тот же самый. Когда вызывается функция worker.port.start(), вызывается обработчик события onconnect общего рабочего файла для регистрации вызывающего и получения дескриптора для связи с клиентским портом (например, для postMessage).

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

Другие вопросы по тегам