Optimizacija obravnavalnikov dogodkov v JavaScriptu

Preveč obravnavalnikov, dodanih na elemente, porabi veliko operativnega spomina in povzroči zastajanje strani.

Poglejmo si na primeru. Recimo, da imamo nek seznam:

html<ul></ul>

Pridobimo referenco na ta seznam v spremenljivko:

javascriptlet ul = document.querySelector('ul');

Izpolnimo zdaj naš seznam z oznakami li in jim dodajmo obravnavalnik klika:

javascriptfor (let i = 1; i <= 1000; i++) {
  let li = document.createElement('li');
  li.textContent = i;
  ul.append(li);
  
  li.addEventListener('click', function() {
    console.log(this.textContent);
  });
}

Kot rezultat imamo 1000 obravnavalnikov. To je zelo veliko. Za optimizacijo lahko dodamo samo en obravnavalnik na oznako ul, z uporabo delegiranja.

Naredimo to. Za začetek preprosto ustvarimo elemente seznama:

javascriptfor (let i = 1; i <= 1000; i++) {
  let li = document.createElement('li');
  li.textContent = i;
  ul.append(li);
}

In zdaj izvedemo delegiranje obravnavalnika dogodkov:

javascriptul.addEventListener('click', function(event) {
  let li = event.target.closest('li');
  
  if (li) {
    console.log(li.textContent);
  }
});
Задание 1

Ustvarite HTML tabelo velikosti 100 na 100. Naredite tako, da se vsaka celica ob kliku obarva rdeče.