Spec-Zone.ru › Web APIs

SharedWorker

Интерфейс SharedWorker представляет собой определенный тип рабочего процесса, к которому можно получить доступ из нескольких контекстов просмотра, таких как несколько окон, фреймов или даже рабочих процессов. Они реализуют интерфейс, отличный от выделенных рабочих процессов, и имеют другой глобальный контекст, SharedWorkerGlobalScope.

Примечание: Если к SharedWorker можно получить доступ из нескольких контекстов просмотра, все эти контексты просмотра должны использовать один и тот же источник (один и тот же протокол, хост и порт).

EventTarget SharedWorker

Конструкторы

SharedWorker()

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

Свойства экземпляра

Наследует свойства от родительского класса, EventTarget.

SharedWorker.port Только для чтения

Возвращает объект MessagePort, используемый для связи с общим рабочим процессом и управления им.

События

error

Срабатывает при возникновении ошибки в общем рабочем процессе.

Методы экземпляра

Наследует методы от родительского класса, EventTarget.

Пример

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

Следующий фрагмент кода демонстрирует создание объекта SharedWorker с помощью конструктора SharedWorker(). Оба скрипта содержат это:

const myWorker = new SharedWorker("worker.js");

Примечание: После создания общего рабочего процесса любой скрипт, работающий в том же источнике, может получить ссылку на этот рабочий процесс и взаимодействовать с ним. Общий рабочий процесс будет активен до тех пор, пока множество владельцев глобального контекста (множество объектов Document и WorkerGlobalScope) не будет пустым (например, если существует любая активная страница, содержащая ссылку на него, возможно, через new SharedWorker()). Дополнительную информацию о жизненном цикле общего рабочего процесса см. в разделе «Жизненный цикл рабочего процесса» спецификации HTML.

Затем оба скрипта получают доступ к рабочему процессу через объект MessagePort, созданный с помощью свойства SharedWorker.port. Если обработчик события onmessage прикреплен с помощью addEventListener, порт вручную запускается с помощью его метода start().

myWorker.port.start();

При запуске порта оба скрипта отправляют сообщения в рабочий процесс и обрабатывают сообщения, отправленные из него, соответственно с помощью port.postMessage() и port.onmessage.

Примечание: Можно использовать инструменты разработчика браузера для отладки SharedWorker, введя URL в адресную строку браузера для доступа к инспектору рабочих процессов инструментов разработчика; например, в Chrome URL chrome://inspect/#workers, а в Firefox URL about:debugging#workers.

[first, second].forEach((input) => {
  input.onchange = () => {
    myWorker.port.postMessage([first.value, second.value]);
    console.log("Message posted to worker");
  };
});

myWorker.port.onmessage = (e) => {
  result1.textContent = e.data;
  console.log("Message received from worker");
};

Внутри рабочего процесса мы используем обработчик onconnect для подключения к тому же порту, что и выше. Порты, связанные с этим рабочим процессом, доступны в свойстве ports события connect — затем мы используем метод MessagePort start() для запуска порта и обработчик onmessage для обработки сообщений, отправленных из основных потоков.

onconnect = (e) => {
  const port = e.ports[0];

  port.addEventListener("message", (e) => {
    const workerResult = `Result: ${e.data[0] * e.data[1]}`;
    port.postMessage(workerResult);
  });

  port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter.
};

Спецификации

Спецификация
HTML
# shared-workers-and-the-sharedworker-interface

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
SharedWorker 5 79 29 10.6 165–7 Нет 33 11–14 165–7 4.0–5.0 Нет
SharedWorker 5 79 29 10.6 165–7 Нет 33 11–14 165–7 4.0–5.0 Нет
error_event 5 79 29 10.6 165–7 Нет 33 11–14 165–7 4.0–5.0 Нет
port 5 79 29 10.6 165–7 Нет 33 11–14 165–7 4.0–5.0 Нет

См. также

  • Worker

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API