I Web Workers consentono di eseguire degli script intensivi in un thread separato, mantenendo la pagina reattiva e senza blocchi, come contrariamente avverrebbe con uno script "convenzionale".
Qualsiasi script che abbia un "costo" di startup ed una durata rilevanti, risulta un ottimo candidato nell'adozione di questa API introdotta da HTML5.
L'utilizzo è abbastanza semplice: occorre innanzitutto creare uno script separato, contenente la funzione/task da eseguire in background e avendo cura di dichiarare un event handler onmessage che fungerà da "entry point" per l'elaborazione. Lato codice chiamante, tipicamente nella pagina, è necessario istanziare uno oggetto Worker passando nel costruttore il nome dello script, quindi specificare un event handler per ricevere i messaggi dal worker e gestirne le successive operazioni, ad esempio, la presentazione dei risultati ottenuti.
<!DOCTYPE html>
<html>
<head>
<title>Web Workers</title>
</head>
<body>
<p> Risultato:
<output id="statusText">...</output></p>
<script type="text/javascript">
function log(msg) {
var message = document.getElementById("statusText");
message.innerHTML = message.innerHTML + "</br>" + msg;
}
//Controllo se i Web Workers sono supportati
if (typeof (Worker) !== "undefined")
doWork();
else
alert('non supportato');
function doWork() {
log("avvio elaborazione worker...");
//Creazione worker
var wrk = new Worker("worker.js");
//Impo
wrk.onmessage = function (event) {
log(event.data);
};
wrk.postMessage("go!");
log("main thread libero.");
}
</script>
</body>
</html>
Il codice del worker, a titolo di esempio, esegue un ciclo per reperire dei dati mediante XMLHttpRequest, richiamando il metodo postMessage ogni volta che occorre comunicare con il chiamante, in questo caso lo script nella pagina.
onmessage = function (event) {
postMessage("Worker - ricevuto messaggio: " + event.data);
var n = 10;
for (var i = n; i > 0; i -= 1) {
var client = new XMLHttpRequest();
client.onreadystatechange = function () {
if (this.readyState == this.DONE)
postMessage("Operazione effettuata");
}
client.open("GET", "veryBigData.xml");
client.send();
}
postMessage("Worker - elaborazione terminata.");
};
La specifica completa è disponibile qui: http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il Null conditional assignment di C# 14
Response streaming con Blazor e .NET 10
Configurare automaticamente un webhook in Azure DevOps
Integrare Agenti A2A in Azure API Management
Effettuare la ricerca di testo nascosto in una pagina web con Javascript
Interazione con ReconnectModal in Blazor
Recuperare gli audit log in Azure DevOps
Gestione dei prompt file a livello di organizzazione aziendale in GitHub
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Ospitare n8n su Azure App Service
Utilizzare i command service nei test con .NET Aspire
Creare espressioni riutilizzabili nelle query LINQ per Entity Framework
I più letti di oggi
- Future Dev Day - Milano
- Global Azure Milan 2020 - Online
- Gli agenti AI sono uno dei temi più interessanti del momento, ma costruirli bene richiede molto più di un semplice prompt. In questa sessione parleremo di Azure AI Foundry con un taglio concreto, utile per capire come progettare agenti AI enterprise-grade, integrarli con tool e memoria, monitorarli e gestirne il deployment in modo efficace. Ci vediamo a Milano al Global Azure 2026 - ASPItalia.com, con Stefano Demiliani. #GlobalAzure #Azure #AzureAIFoundry #AI #AIAgents https://aspit.co/globalazure-26
- Global Azure 2026 - ASPItalia.com - Milano




