We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

L'interfaccia Worker delle Web Workers API rappresenta un processo in background che può essere facilmente generato e in grado di inviare messaggi al creatore. Per creare un worker basta specificare nel metodo costruttore Worker() lo script che sarà incaricato di eseguire.

I Workers saranno poi in grado di inizializzare ulteriori workers fintanto che questi workers hanno la stessa origine della pagina su cui sono ospitati (NB: l'annidamento di workers non è ancora implementato in Blink).  I workers possono tuttavia usare XMLHttpRequest per richiamare risorse esterne, a patto che gli attributi responseXML e channel di XMLHttpRequest restituiscano null.

Non tutte le interfacce nè i metodi sono disponibili nel contesto dello script interpretato da un Worker.

Se si vuole utilizzare i workers nelle estensioni per Firefox ed avere accesso a js-ctypes, bisogna utilizzare l'interfaccia ChromeWorker.

Costruttori

Worker()
Crea un  worker che eseguirà lo script specificato nella URL. I Workers possono essere anche invocati tramite Blobs.

Proprietà

Eredita proprietà dal suo parent, EventTarget, e implementa quelle di AbstractWorker.

Eventi gestiti

AbstractWorker.onerror
Un EventListener invocato quando un ErrorEvent di tipo error arriva al worker. Questo evento è ereditato da AbstractWorker.
Worker.onmessage
Un EventListener invocato quando  un MessageEvent di tipo message arriva al worker — Per esempio quando un messaggio viene inviato al documento parent da un worker tramite DedicatedWorkerGlobalScope.postMessage. Il messaggio viene salvato nella proprietà data dell'evento.
Worker.onmessageerror
Un EventHandler che rappresenta il codice da invocare quando l'evento messageerror è invocato.

Metodi

Eredita i metodi del suo parent, EventTarget, e quelli di AbstractWorker.

Worker.postMessage()
Invia un messaggio (any JavaScript object) al contesto interno del worker.
Worker.terminate()
Termina immediatamente il worker troncando qualsiasi operazione in corso. Le istanze di ServiceWorker non supportano questo metodo.

Esempio

Il codice che segue mostra la creazione di un oggetto Worker usando il costruttore Worker() e l'invio di un messaggio:

var myWorker = new Worker('worker.js');
var first = document.querySelector('#number1');
var second = document.querySelector('#number2');

first.onchange = function() {
  myWorker.postMessage([first.value,second.value]);
  console.log('Messaggio inviato al worker');
}

Per un esempio completo: Esempio worker ( esegui worker).


Specifiche

Specification Status Comment
HTML Living Standard
The definition of 'Worker' in that specification.
Living Standard  

Compatibilità Browser

Il supporto dipende per ciascun tipo di worker. Controlla le pagine dei singoli worker per avere maggiori dettagli.

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support4 Yes3.51010.64
Worker() constructor4 Yes3.51010.64
onmessage4123.51010.64
onmessageerror60 ?57 ?47 ?
postMessage Yes12 Yes10147 Yes
terminate4123.51010.64
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support44 Yes411.55.1 Yes
Worker() constructor44 Yes411.55.1 Yes
onmessage44 Yes411.55.1 Yes
onmessageerror6060 ?5747 ? No
postMessage Yes Yes Yes Yes47 Yes Yes
terminate44 Yes411.55.1 Yes

1. Internet Explorer does not support Transferable objects.

Cross-origin worker, comportamento in caso di errore

Nelle prime implementazioni browser caricare uno script cross-origin per un worker causava un errore SecurityError; nelle implementazioni piu' recenti invece viene generato un evento error per rispettare le specifiche. Puoi trovare maggiori informazioni su come gestire queste situazioni qui: Loading cross-origin worker now fires error event instead of throwing; worker in sandboxed iframe no longer allowed.

Vedi Anche

Tag del documento e collaboratori

Tag: 
Hanno collaborato alla realizzazione di questa pagina: rainst
Ultima modifica di: rainst,