В чем разница между 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.