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 handleronmessage. - Ograničenja: Worker-i nemaju pristup DOM-u,
windowobjektu i drugim globalnim objektima pretraživača. Imaju ograničen pristupnavigator,location,XMLHttpRequest,setTimeout,setInterval,fetch,WebSocketsi 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.