Sündmuste käitlejate optimeerimine JavaScriptis

Liiga palju käitlejaid, elementidele lisatud, söövad palju muutmälu ja viivad lehe kokkujooksmiseni.

Vaatame näite abil. Oletame, et meil on mingi loend:

html<ul></ul>

Saame viite sellele loendile muutujasse:

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

Täidame nüüd meie loendi siltidega li, lisades neile kliki käitleja:

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);
  });
}

Lõpuks saame, et meil on 1000 käitlejat. See on väga palju. Optimeerimiseks võime lisada ainult ühe käitleja sildile ul, kasutades delegeerimist.

Teeme seda. Alustuseks lihtsalt loome loendi punktid:

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

Ja nüüd teostame sündmuste käitleja delegeerimise:

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

Looge HTML tabel mõõtmetega 100 korda 100. Tehke nii, et iga lahter klõpsamisel värvub punaseks.