Middle
Ce sunt web workers și la ce sunt folosiți?
sobes.tech AI
Răspuns de la AI
Web workerii sunt o modalitate de a rula cod JavaScript într-un fir de execuție de fundal, separat de firul principal de UI al browserului.
Scop:
- Executarea calculurilor intensive în resurse fără blocarea firului principal, prevenind blocarea interfeței.
- Procesarea datelor mari sau efectuarea operațiunilor lungi (de exemplu, parsing, comprimare, solicitări de rețea în unele cazuri) în fundal.
- Îmbunătățirea performanței și a răspunsului aplicațiilor web.
Tipuri de web worker:
- Dedicated Worker: Asociat cu scriptul care l-a creat.
- Shared Worker: Poate fi partajat între mai multe scripturi care rulează în ferestre sau file diferite ale aceluiași domeniu.
- Service Worker: Interceptează solicitările de rețea, gestionează cache-ul, oferă acces offline, suportă notificări push.
Exemplu de creare și utilizare a unui Dedicated Worker:
// main.js (firul principal)
const worker = new Worker('worker.js');
// Trimiterea unui mesaj către worker
worker.postMessage('Începe calcule grele');
// Primirea mesajelor de la worker
worker.onmessage = function(event) {
console.log('Primite de la worker:', event.data);
};
// worker.js (codul workerului)
self.onmessage = function(event) {
console.log('Primite în worker:', event.data);
// Simulare de calcule grele
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Trimiterea mesajului înapoi către firul principal
self.postMessage('Calculul s-a încheiat, rezultatul: ' + result);
};
Limitări:
- Fără acces direct la DOM.
- Nu se pot folosi unele variabile globale ale firului principal (de exemplu,
window,document). - Comunicația se face prin schimb asincron de mesaje (
postMessageșionmessage/addEventListener('message')). - Datele între fire sunt transferate prin copiere (algoritmul de clonare structurată), dar pentru date mari se pot folosi
Transferable Objectspentru transfer prin referință (cu pierderea accesului în firul original).