Un memory leak (perdita di memoria) accade quando una parte della nostra applicazione continua a occupare memoria anche se non serve più, il che può portare a prestazioni peggiori nel tempo, browser che consumano più RAM e comportamenti strani o rallentamenti.
In JavaScript, questo capita spesso per via di closure, event listener e variabili che restano raggiungibili, anche se non più utili.
function outer() {
let secret = "mio segreto";
return function inner() {
console.log(secret);
};
}Una closure avviene quando una funzione interna può accedere a variabili definite in una funzione esterna, anche dopo che quest?ultima ha terminato la sua esecuzione. Facciamo un esempio più concreto:
function setupProfile(user) {
const bigData = new Array(1000000).fill(`Dati di ${user.name}`);
function onClick() {
console.log(`Aggiorno profilo di ${user.name}`);
}
document.getElementById('updateBtn').addEventListener('click', onClick);
}
setupProfile(myUser);In questo caso, la funzione setupProfile viene eseguita e associa un evento al click su un bottone. Ma dato che l'evento è definito all'interno della funzione, la variabile bigData e l'oggetto user restano in memoria anche dopo che la funzione ha finito l'esecuzione.
Un modo per evitare questo problema è rimuovere l'event listener quando non serve più. Possiamo farlo in vari modi, uno dei più semplici è impostare un timer e rimuoverlo dopo un certo periodo di tempo.
function setupProfile(user) {
// [...]
//Cleanup automatico dopo 30 secondi (esempio)
setTimeout(() => {
btn.removeEventListener('click', onClick);
}, 30000);
}In questo modo, non essendo più raggiungibile la funzione onClick, le variabili bigData e user non saranno più in memoria, evitando il memory leak.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare ExecuteUpdate per aggiornare colonne JSON in Entity Framework
Running workloads and operations with Azure Kubernetes Service
Blazor e InputHidden in .NET 10
Utilizzare le direttive più importanti in una file based app .NET
Supporto semplificato per le left join in Entity Framework 10
Microsoft Fabric: la piattaforma unificata per l'ecosistema dati moderno
Creare una cache temporanea in JavaScript
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Esporre un server MCP con Azure API Management
Agentic Workflows in GitHub
Logica Graceful Degradation in HTML e CSS
Centralizzare e governare MCP server e Skill con Azure API Center


