Web worker: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
→Esempio: traduco in italiano; aggiungo chiarimento |
Migliorato la pagina |
||
(Una versione intermedia di un altro utente non mostrate) | |||
Riga 1:
Un '''''web worker''''', come definito dal [[World Wide Web Consortium]] (W3C) e dal [[Web Hypertext Application Technology Working Group]] (WHATWG), è uno [[JavaScript|script JavaScript]] che viene eseguito in [[Esecuzione in background|background]] in una pagina [[HTML]] indipendentemente dagli script dell'interfaccia utente.<ref name="WHATWG">{{Cita pubblicazione|url=https://www.whatwg.org/specs/web-workers/current-work/|titolo=Web Workers|editore=[[Web Hypertext Application Technology Working Group|WHATWG]]|accesso=3 giugno 2010}}</ref> I
Il W3C e WHATWG considerano i ''web worker'' come script a esecuzione prolungata che non vengono interrotti dagli script dell'interfaccia utente (che rispondono ai clic o ad altre interazioni dell'utente). Il fatto di impedire a tali ''worker'' di essere interrotti dalle attività utente dovrebbe consentire alle pagine
Il W3C e il WHATWG sono attualmente nel processo di sviluppo della definizione di [[Application programming interface|API]] per i ''web worker''.<ref name="WHATWG" />
== Panoramica ==
Come concepiti da WHATWG, i ''web worker'' sono relativamente pesanti. Sono intesi per essere longevi, con un costo elevato in termini di prestazioni di avvio e un costo elevato di memoria per istanza.<ref name="WHATWG" /> Di conseguenza non dovrebbero essere utilizzati in grandi quantità, in quanto potrebbero monopolizzare le risorse di sistema.
I ''web worker'' consentono l'esecuzione dei [[Thread (informatica)|thread]] del [[browser]] in [[Concorrenza (informatica)|concorrenza]] a uno o più thread JavaScript in esecuzione in background. Normalmente il browser, che segue un singolo thread di esecuzione, deve attendere il completamento dell'esecuzione dei programmi JavaScript prima di procedere e ciò potrebbe richiedere del tempo significativo che il programmatore potrebbe voler nascondere all'utente. I ''web worker'' permettono al browser di continuare con le normali operazioni durante l'esecuzione in background dello script.
La specifica ''web worker'' è separata dalla specifica HTML5<ref name="into html5" /> e può essere utilizzata con HTML5.
Esistono due tipi di ''web worker'':<ref name="WHATWG" /> dedicati e condivisi.
Quando i ''web worker'' sono eseguiti in background non hanno accesso diretto al DOM ma comunicano con il documento tramite [[Comunicazione a scambio di messaggi|scambio di messaggi]]. Ciò consente l'esecuzione multi-thread dei programmi JavaScript.
== Caratteristiche ==
I
var worker = new Worker("worker_script.js");
</syntaxhighlight>Per inviare un messaggio al ''worker'' si usa il metodo <code>postMessage</code> dell'oggetto ''worker'', come mostrato nell'esempio successivo.<syntaxhighlight lang="javascript">
worker.postMessage("Hello World!");
</syntaxhighlight>La proprietà <code>onmessage</code> usa un ''event handler'' per recuperare informazioni da un ''worker''.<syntaxhighlight lang="javascript" line="1">
worker.onmessage = function(event) {
alert("Received message " + event.data);
Riga 33:
worker.terminate();
</syntaxhighlight>Una volta che un worker è terminato diventa fuori portata e la variabile che fa riferimento diventa {{Codice|codice=undefined|linguaggio=JavaScript}}; a questo punto è necessario creare un nuovo worker, se necessario.
== Esempio ==
L'uso più semplice dei ''web worker'' è eseguire task computazionalmente costosi senza interrompere l'interfaccia utente.
In questo esempio, il documento principale crea un ''web worker'' per computare numeri primi e li mostra progressivamente l'ultimo numero primo trovato.
La pagina principale come segue:<syntaxhighlight lang="html4strict" line="1">
<!DOCTYPE html>
<html>
Riga 47:
</head>
<body>
<p>il più grande numero primo calcolato
<script>
var worker = new Worker('worker.js');
Riga 56:
</body>
</html>
</syntaxhighlight>La chiamata al costruttore <code>Worker()</code> crea un ''web worker'' e ritorna un oggetto <code>worker</code> , il quale è usato per comunicare con il ''web worker''. L{{'}}''event handler'' <code>onmessage</code> dell'oggetto permette al codice di ricevere messaggi dal ''web worker''.
Il codice del
var n = 1;
var end_value = 10**7;
Riga 73:
== Supporto ==
Il supporto dei browser per i ''web worker'' può essere controllato attraverso la proprietà
Il seguente codice di esempio controlla il supporto dei ''web worker'' su un browser:<syntaxhighlight lang="javascript" line="1">
function browserSupportsWebWorkers() {
return typeof window.Worker === "function";
}
</syntaxhighlight>I ''web worker'' sono attualmente supportati da [[Google Chrome|Chrome]], [[Opera (browser)|Opera]], [[Internet Explorer 10]]
== Note ==
|