Sobes.tech
Middle

Kako kreirati Web Worker tok u JavaScript-u?

sobes.tech АИ

Одговор од АИ

Kreiranje Web Worker niti u JavaScript-u može se izvršiti pomoću konstruktora Worker.

// Kreiramo novi Web Worker, prosleđujući putanju do JS fajla,
// koji će se izvršavati u odvojenoj niti.
const worker = new Worker('worker.js'); 

U fajlu worker.js (ili bilo kojem drugom, navedenom prilikom kreiranja workera) će se izvršavati kod u odvojenoj niti.

// worker.js

// Obrada poruka poslatih iz glavne niti
self.onmessage = function(event) {
  const receivedData = event.data;
  console.log('Poruka primljena od glavne niti:', receivedData);

  // Slanje poruke nazad u glavnu nit
  const responseData = { message: 'Zdravo od Workera!', data: receivedData };
  self.postMessage(responseData);
};

// Po želji, može se dodati obrada grešaka
self.onerror = function(error) {
  console.error('Greška u Worker-u:', error);
};

U glavnoj niti (gde je kreiran worker), može se komunicirati sa njim:

// main.js

const worker = new Worker('worker.js'); 

// Slanje poruke Web Worker-u
worker.postMessage({ command: 'start', payload: 'some data' });

// Obrada poruka primljenih od Web Worker-a
worker.onmessage = function(event) {
  const receivedData = event.data;
  console.log('Poruka od Workera:', receivedData);
};

// Obrada grešaka u Web Worker-u
worker.onerror = function(error) {
  console.error('Greška u Web Worker-u:', error);
};

// Zatvaranje Web Workera (opciono)
// worker.terminate(); 

Ključne tačke:

  • Komunikacija: Razmena podataka između glavne niti i workera vrši se putem poruka koristeći metode postMessage() i handler onmessage.
  • Ograničenja: Worker-i nemaju pristup DOM-u, window objektu i drugim globalnim objektima pretraživača. Imaju ograničen pristup navigator, location, XMLHttpRequest, setTimeout, setInterval, fetch, WebSockets i drugim.
  • Izolacija: Kod u worker-u se izvršava u odvojenoj niti, što sprečava blokiranje glavne niti i poboljšava performanse, posebno kod resursno zahtevnih računanja.