Sobes.tech
Middle

Cosa sono i Web Workers e a cosa servono?

sobes.tech AI

Risposta dell'AI

I Web Workers consentono di eseguire operazioni intensive in risorse in thread di background, senza bloccare il thread principale di esecuzione di JavaScript, che si occupa di rendere l'interfaccia utente. Ciò previene il blocco della pagina e migliora la reattività dell'applicazione, specialmente quando si lavora con grandi volumi di dati, calcoli o richieste di rete.

Tipi principali di Worker:

  • Worker dedicato: Creato con new Worker('worker.js'). Funziona solo con la pagina che lo ha creato ed è gestito direttamente dallo script di questa pagina.
  • Shared Worker: Creato con new SharedWorker('worker.js'). Può essere accessibile da più script in diverse finestre o schede dello stesso origine.
  • Service Worker: Funziona come un proxy tra il browser e la rete. Viene usato per la cache delle risorse, il funzionamento autonomo e l'implementazione di notifiche push.

La comunicazione tra il thread principale e il Worker avviene in modo asincrono tramite messaggi:

  • postMessage(): per inviare dati da un thread all'altro.
  • Gestore di eventi onmessage: per ricevere dati in un altro thread.

Restrizioni dei Web Workers:

  • Non hanno accesso diretto al DOM.
  • Non hanno accesso agli oggetti window e document.
  • Non hanno accesso ad alcune variabili e funzioni globali del thread principale.

Esempio di utilizzo di Worker dedicato:

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

worker.addEventListener('message', (event) => {
  console.log('Messaggio ricevuto dal Worker:', event.data);
});

worker.postMessage('Ciao dal thread principale!');

// worker.js
self.addEventListener('message', (event) => {
  console.log('Messaggio ricevuto dal thread principale:', event.data);
  self.postMessage('Ciao dal Worker!');
});