0Pricing
JavaScript Academy · Lekcja

Unikanie wycieków — domknięcia, czasomierze i referencje

Zapobieganie wyciekom pamięci przez czyszczenie czasomierzy, ograniczanie domknięć i usuwanie nieużywanych referencji; stosowanie prostych wzorców dla początkujących

Unikanie wycieków — domknięcia, czasomierze i referencje to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Czym jest wyciek?

Cel: Unikać prostych wycieków pamięci.

  • Zawsze czyść timery
  • Nie przechowuj nieużywanych referencji
  • Utrzymuj domknięcia w niewielkim rozmiarze
  • Preferuj dane krótkotrwałe
Unikanie wycieków — domknięcia, czasomierze i referencje — ilustracja 1

Czyszczenie interwałów

Przechowuj id interwału; podczas sprzątania wywołaj clearInterval, aby timer i przechwycone dane mogły zostać zwolnione.

// 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();
Unikanie wycieków — domknięcia, czasomierze i referencje — ilustracja 2

Mniejsze domknięcia

Domknięcia przechowują to, co przechwytują. Jeśli to możliwe, przechwytuj małe wartości zamiast całych obiektów.

// 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());
Unikanie wycieków — domknięcia, czasomierze i referencje — ilustracja 3

Ograniczaj bufory

Długotrwałe tablice i mapy mogą powodować wycieki pamięci, jeśli rosną bez ograniczeń; regularnie je przycinaj lub resetuj.

// 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);
Unikanie wycieków — domknięcia, czasomierze i referencje — ilustracja 4

WeakMap w praktyce

WeakMap jest przydatny do dołączania metadanych bez uniemożliwiania mechanizmowi garbage collection zwolnienia obiektu będącego kluczem.

// 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)");
Unikanie wycieków — domknięcia, czasomierze i referencje — ilustracja 5

Praktyki zapobiegania wyciekom

Lista kontrolna:

  • Przechowuj identyfikatory timerów; podczas sprzątania wywołuj clearInterval/clearTimeout.
  • Przechwytuj w domknięciach tylko potrzebne wartości.
  • Przycinaj/resetuj długotrwałe tablice i mapy.
  • Preferuj dane krótkotrwałe; po zakończeniu usuwaj referencje.
Unikanie wycieków — domknięcia, czasomierze i referencje — ilustracja 6

Quiz: czyszczenie timerów

Szybkie sprawdzenie: Timery i wycieki pamięci.

Unikanie wycieków — domknięcia, czasomierze i referencje — ilustracja 7

Podsumowanie

Podsumowanie: Czyść timery, unikaj przechwytywania ogromnych obiektów w domknięciach oraz przycinaj lub usuwaj długotrwałe referencje. Niewielkie działania porządkowe zapobiegają wyciekom pamięci w aplikacjach tworzonych z myślą o początkujących.

Unikanie wycieków — domknięcia, czasomierze i referencje — ilustracja 8

Często zadawane pytania

Czy lekcja „Unikanie wycieków — domknięcia, czasomierze i referencje” jest bezpłatna?

Tak — pełny tekst „Unikanie wycieków — domknięcia, czasomierze i referencje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Unikanie wycieków — domknięcia, czasomierze i referencje”?

Zapobieganie wyciekom pamięci przez czyszczenie czasomierzy, ograniczanie domknięć i usuwanie nieużywanych referencji; stosowanie prostych wzorców dla początkujących Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?

Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.

Ile czasu zajmuje lekcja „Unikanie wycieków — domknięcia, czasomierze i referencje”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?

Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy Big-O, ścieżki gorące i zimne (szybkie sukcesy początkujących)
  2. Unikanie wycieków — domknięcia, czasomierze i referencje
  3. Wprowadzenie do profilowania (Node/DevTools) — proste nawyki pomiarowe
← Powrót do JavaScript Academy