Middle
Hogyan hozzunk létre Web Worker szálat JavaScript-ben?
sobes.tech MI
Válasz az MI-től
A JavaScript-ben Web Worker szál létrehozása a Worker konstruktor segítségével történhet.
// Új Web Worker létrehozása, átadva az JS fájl elérési útját,
// amely külön szálon fog futni.
const worker = new Worker('worker.js');
A worker.js fájlban (vagy bármely más, a worker létrehozásakor megadott fájlban) a kód külön szálon fog futni.
// worker.js
// Üzenetek feldolgozása, amelyeket a fő szál küld
self.onmessage = function(event) {
const receivedData = event.data;
console.log('Üzenet a fő szálról:', receivedData);
// Üzenet küldése vissza a fő szálnak
const responseData = { message: 'Szia a Worker-től!', data: receivedData };
self.postMessage(responseData);
};
// Opcionálisan hibakezelés hozzáadása
self.onerror = function(error) {
console.error('Hiba a Worker-ben:', error);
};
A fő szálon (ahol a worker-t létrehozták) lehet vele kommunikálni:
// main.js
const worker = new Worker('worker.js');
// Üzenet küldése a Web Worker-nek
worker.postMessage({ command: 'start', payload: 'some data' });
// Üzenetek fogadása a Web Worker-től
worker.onmessage = function(event) {
const receivedData = event.data;
console.log('Üzenet a Worker-től:', receivedData);
};
// Hibák kezelése a Web Worker-ben
worker.onerror = function(error) {
console.error('Hiba a Worker-ben a fő szálon:', error);
};
// Web Worker befejezése (opcionális)
// worker.terminate();
Kulcsfontosságú pontok:
- Kommunikáció: Az adatok cseréje a fő szál és a worker között üzeneteken keresztül történik, a
postMessage()és azonmessagehandler segítségével. - Korlátozások: A worker-ek nem férnek hozzá a DOM-hoz, a
windowobjektumhoz és a böngésző egyéb globális objektumaihoz. Korlátozott hozzáférésük van anavigator,location,XMLHttpRequest,setTimeout,setInterval,fetch,WebSocketsés más objektumokhoz. - Izoláció: A worker-ben futó kód külön szálon fut, ez megakadályozza a fő szál blokkolását és javítja a teljesítményt, különösen erőforrás-igényes számítások esetén.