Middle
Cosa sono i web worker e a cosa servono?
sobes.tech AI
Risposta dell'AI
I web worker sono un modo per eseguire codice JavaScript in un thread di background, separato dal thread principale dell'interfaccia utente del browser.
Scopo:
- Eseguire calcoli intensivi senza bloccare il thread principale, prevenendo il blocco dell'interfaccia.
- Elaborare grandi quantità di dati o eseguire operazioni lunghe (ad esempio parsing, compressione, richieste di rete in alcuni casi) in background.
- Migliorare le prestazioni e la reattività delle applicazioni web.
Tipi di web worker:
- Dedicated Worker: Associato allo script che lo ha creato.
- Shared Worker: Può essere condiviso tra più script che vengono eseguiti in diverse finestre o schede dello stesso dominio.
- Service Worker: Intercetta le richieste di rete, gestisce la cache, fornisce accesso offline, supporta le notifiche push.
Esempio di creazione e utilizzo di un Dedicated Worker:
// main.js (thread principale)
const worker = new Worker('worker.js');
// Invia un messaggio al worker
worker.postMessage('Inizia calcoli pesanti');
// Riceve messaggi dal worker
worker.onmessage = function(event) {
console.log('Ricevuto dal worker:', event.data);
};
// worker.js (codice del worker)
self.onmessage = function(event) {
console.log('Ricevuto nel worker:', event.data);
// Simulazione di calcoli pesanti
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Invia un messaggio di ritorno al thread principale
self.postMessage('Calcoli completati, risultato: ' + result);
};
Limitazioni:
- Nessun accesso diretto al DOM.
- Non è possibile usare alcune variabili globali del thread principale (ad esempio,
window,document). - La comunicazione avviene tramite scambio asincrono di messaggi (
postMessageeonmessage/addEventListener('message')). - I dati tra thread vengono trasferiti tramite copia (algoritmo di clonazione strutturata), ma per grandi dati si può usare
Transferable Objectsper trasferire per riferimento (perdendo l'accesso nel thread originale).