SharedWorker
Интерфейс SharedWorker представляет собой определенный тип рабочего процесса, к которому можно получить доступ из нескольких контекстов просмотра, таких как несколько окон, фреймов или даже рабочих процессов. Они реализуют интерфейс, отличный от выделенных рабочих процессов, и имеют другой глобальный контекст, SharedWorkerGlobalScope.
Примечание: Если к SharedWorker можно получить доступ из нескольких контекстов просмотра, все эти контексты просмотра должны использовать один и тот же источник (один и тот же протокол, хост и порт).
Конструкторы
-
Создает общий веб-рабочий процесс, который выполняет скрипт по указанному URL.
Свойства экземпляра
Наследует свойства от родительского класса, EventTarget.
-
Возвращает объект
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 | Нет |
См. также
© 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