Optimering van Gebeurtenishanteerders in JavaScript

Buitensporig baie hanteerders, wat op elemente geplaas is, vreet baie geheue en lei tot bladsy-hang.

Kom ons kyk na 'n voorbeeld. Gestel ons het 'n sekere lys:

html<ul></ul>

Laat ons 'n verwysing na hierdie lys kry in 'n veranderlike:

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

Laat ons nou ons lys vul met li-etikette, deur op elk 'n kliekhanteerder te plaas:

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

Uiteindelik het ons 1000 hanteerders. Dit is baie. Vir optimalisering kan ons net een hanteerder plaas op die ul-etiket, deur gebruik te maak van delegasie.

Kom ons doen dit. Om mee te begin, skep ons eenvoudig die lysitems:

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

Laat ons nou gebeurtenishanteerder-delegasie implementeer:

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

Skep 'n HTML-tabel met grootte 100 met 100. Maak dit so dat elke sel rooi kleur wanneer daarop gekliek word.