Sobes.tech
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 az onmessage handler segítségével.
  • Korlátozások: A worker-ek nem férnek hozzá a DOM-hoz, a window objektumhoz és a böngésző egyéb globális objektumaihoz. Korlátozott hozzáférésük van a navigator, 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.