const myWorker = new Worker('worker.js')// Відправити у воркер
myWorker.postMessage('Hello!');
// Отримати з воркера
myWorker.onmessage = (e) => {
console.log(e.data);
}
// Вбити(
worker.terminate()/* worker.js */
// Отримувати з головного файлу
self.onmessage = function(e) {
console.log(e.data);
// Надіслати до головного файлу
self.postMessage('some info');
}Воркери можна подружити через SharedWorker
worker.postMessage({ port: sharedWorker.port }, [sharedWorker.port]);* для цього використовується головний потік
const worker = new SharedWorker("worker.js")
worker.port.start()
// -->
worker.port.postMessage({hello: 'world'});
// --<
worker.port.onmessage = (e) => { e.data... };
// підписка
self.onconnect = function(e) {
const port = e.ports[0];
port.onmessage = (e) => { e.data... };
};не має DOM
не має window, є глобальний об'єкт self
не можна малювати в канвас (крім OffscreenCanvas)
не має підтримки CORS, завантаження тільки з поточного домену
має обмежений розмір стека (2-10x)
navigator.serviceWorker.register('/service-worker.js').then(lolool)
// можна викликати ввесь час після завантаження,
// браузер сам вирішить чи воркер зареєстровано/* service-worker.js */
self.addEventListener('install', (event) => {
// ...
});
// ця подія спрацьовує після інсталяції воркера та видалення старого
self.addEventListener('activate', (event) => {
// ...
});
// якщо користувач змінив сторінку чи оновив поточну
self.addEventListener('fetch', (event) => {
// ...
});navigator.storage.estimate().then(estimate => {
console.log(`
Using: ${estimate.usage / 1024 / 1024} Mb;
Limit: ${estimate.quota / 1024 / 1024} Mb;
`);
})