跳到主要内容

SharedWorker

2025年01月19日
柏拉文
越努力,越幸运

一、认识


SharedWorker 可以在多个标签页之间共享一个 Worker,通过 port 对象通信。

二、实现


2.1 发布消息

创建 SharedWorker

self.onconnect = (event) => {
const port = event.ports[0];
port.onmessage = (event) => {
const message = event.data;
port.postMessage(`Echo: ${message}`);
};
};

引入 ServiceWorker

const worker = new SharedWorker('shared-worker.js');

// 接收消息
worker.port.onmessage = (event) => {
console.log('Received message:', event.data);
};

// 发送消息
worker.port.postMessage('Hello, Tabs!');
worker.port.start();

发布消息

const worker = new SharedWorker('shared-worker.js');

// 接收消息
worker.port.onmessage = (event) => {
console.log('Received message:', event.data);
};

// 发送消息
worker.port.postMessage('Hello, Tabs!');
worker.port.start();

2.2 接收消息

创建 SharedWorker

self.onconnect = (event) => {
const port = event.ports[0];
port.onmessage = (event) => {
const message = event.data;
port.postMessage(`Echo: ${message}`);
};
};

引入 ServiceWorker

const worker = new SharedWorker('shared-worker.js');

// 接收消息
worker.port.onmessage = (event) => {
console.log('Received message:', event.data);
};

// 发送消息
worker.port.postMessage('Hello, Tabs!');
worker.port.start();

发布消息

const worker = new SharedWorker('shared-worker.js');

// 接收消息
worker.port.onmessage = (event) => {
console.log('Received message:', event.data);
};

// 发送消息
worker.port.postMessage('Hello, Tabs!');
worker.port.start();