0Pricing
JavaScript Academy · Lezione

Evitare le perdite — closure, timer e riferimenti

Previeni le perdite di memoria cancellando i timer, limitando le closure e rimuovendo i riferimenti inutilizzati; usi piccoli schemi applicabili anche da chi è alle prime armi.

Evitare le perdite — closure, timer e riferimenti è una lezione JavaScript Academy gratuita su CoddyKit. Questa è la lezione 2 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento JavaScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso JavaScript Academy include 3 lezioni in totale.

Che cos'è un leak?

Obiettivo: evitare i leak più semplici.

  • Cancellate sempre i timer
  • Non conservate riferimenti inutilizzati
  • Mantenete piccole le closure
  • Preferite i dati di breve durata
Evitare le perdite — closure, timer e riferimenti — illustrazione 1

Cancellare gli intervalli

Conservate l'id dell'intervallo; chiamate clearInterval durante la pulizia, così il timer e i valori catturati possono essere raccolti dal garbage collector.

// Start an interval and then clear it to avoid leaks
function startTicker() {
  // store id so we can clear later
  const id = setInterval(function () {
    // work would run every X ms; omitted for demo
  }, 1000);

  // simulate screen close / cleanup
  clearInterval(id);
  console.log("interval cleared");
}

startTicker();
Evitare le perdite — closure, timer e riferimenti — illustrazione 2

Closure più piccole

Le closure conservano ciò che catturano. Quando possibile, catturate valori piccoli invece di oggetti interi.

// Avoid capturing large objects when only small data is needed
function makeReporter(bigArray) {
  // BAD: store the whole array inside the closure
  const large = bigArray;

  return function reportLength() {
    // Only the length is used
    return large.length;
  };
}

// BETTER: capture only what you need
function makeReporterBetter(bigArray) {
  const count = bigArray.length; // small number
  return function reportLength() {
    return count;
  };
}

const arr = new Array(1000).fill(0);
const bad = makeReporter(arr);
const good = makeReporterBetter(arr);
console.log("bad:", bad(), "good:", good());
Evitare le perdite — closure, timer e riferimenti — illustrazione 3

Limitare i buffer

Array e map di lunga durata possono causare perdite di memoria se crescono senza limiti; ridimensionateli o reimpostateli regolarmente.

// A growing buffer can leak if never trimmed or reset
const buffer = []; // module-level array

function logItem(x) {
  buffer.push(x); // grows forever if not managed
}

// Simulate usage
logItem("a");
logItem("b");

// FIX: trim or reset when size is over a limit
function trimBuffer(limit) {
  if (buffer.length > limit) {
    buffer.length = limit; // drop old items
  }
}

trimBuffer(1);
console.log("buffer size:", buffer.length);
Evitare le perdite — closure, timer e riferimenti — illustrazione 4

Un assaggio di WeakMap

WeakMap è utile per associare metadati senza impedire la garbage collection dell'oggetto usato come chiave.

// WeakMap holds keys weakly: when the object is gone, the entry can be collected
const meta = new WeakMap();

function attachMeta(obj, info) {
  meta.set(obj, info);
}

function readMeta(obj) {
  return meta.get(obj); // undefined if not set or collected
}

let user = { name: "Ayla" };
attachMeta(user, { seen: true });
console.log("meta now:", readMeta(user));

// Later: drop the only strong reference
user = null; // after this, the object and its metadata can be GC'd at some point
console.log("object reference dropped (cannot show GC in console)");
Evitare le perdite — closure, timer e riferimenti — illustrazione 5

Buone pratiche per prevenire i leak

Checklist:

  • Memorizzate gli id dei timer; durante la pulizia, chiamate clearInterval/clearTimeout.
  • Nelle closure, catturate solo i valori necessari.
  • Ridimensionate/reimpostate gli array e le map di lunga durata.
  • Preferite i dati di breve durata; eliminate i riferimenti quando avete finito.
Evitare le perdite — closure, timer e riferimenti — illustrazione 6

Quiz sulla pulizia dei timer

Controllo rapido: timer e leak.

Evitare le perdite — closure, timer e riferimenti — illustrazione 7

Riepilogo

Riepilogo: cancellate i timer, evitate di catturare oggetti enormi nelle closure e ridimensionate o eliminate i riferimenti di lunga durata. Piccole operazioni di pulizia impediscono alle app semplici per chi sta imparando di perdere memoria.

Evitare le perdite — closure, timer e riferimenti — illustrazione 8

Domande Frequenti

La lezione «Evitare le perdite — closure, timer e riferimenti» è gratuita?

Sì — il testo completo di «Evitare le perdite — closure, timer e riferimenti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso JavaScript Academy, passa a CoddyKit PRO. Il corso JavaScript Academy include 3 lezioni in totale.

Cosa imparerò in «Evitare le perdite — closure, timer e riferimenti»?

Previeni le perdite di memoria cancellando i timer, limitando le closure e rimuovendo i riferimenti inutilizzati; usi piccoli schemi applicabili anche da chi è alle prime armi. Eserciti JavaScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare JavaScript Academy?

Non è richiesta alcuna esperienza precedente. JavaScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 3.

Quanto tempo richiede la lezione «Evitare le perdite — closure, timer e riferimenti»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione JavaScript Academy?

Sì. Ogni lezione JavaScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Basi della Big-O, percorsi caldi e freddi (vantaggi per principianti)
  2. Evitare le perdite — closure, timer e riferimenti
  3. Introduzione al profiling (Node/DevTools) — semplici abitudini di misurazione
← Torna a JavaScript Academy