Heim > Web-Frontend > js-Tutorial > Wie verbessert die Vanilla-JavaScript-Ereignisdelegierung die Leistung gegenüber mehreren einzelnen Ereignis-Listenern?

Wie verbessert die Vanilla-JavaScript-Ereignisdelegierung die Leistung gegenüber mehreren einzelnen Ereignis-Listenern?

Mary-Kate Olsen
Freigeben: 2024-11-30 17:48:13
Original
646 Leute haben es durchsucht

How Does Vanilla JavaScript Event Delegation Improve Performance over Multiple Individual Event Listeners?

Vanilla JavaScript Event Delegation: Eine detaillierte Analyse

Hintergrund

Event Delegation ist eine Technik, die verwendet wird, um die Handhabung mehrerer Event-Listener zu vereinfachen, die an verschiedene angeschlossen sind Elemente innerhalb einer DOM-Struktur. In Vanilla-JavaScript kann dies mit .addEventListener() erreicht werden.

Ereignisdelegation in Vanilla JS

Um das in der Frage bereitgestellte jQuery-Beispiel zu übersetzen:

$('#main').on('click', '.focused', function() {
    settingsPanel();
});
Nach dem Login kopieren

... in Vanilla-JavaScript würden wir Folgendes verwenden:

document.querySelector('#main').addEventListener('click', (e) => {
  if (e.target.closest('#main .focused')) {
    settingsPanel();
  }
});
Nach dem Login kopieren

Verbesserte Lösung

Allerdings Um die Leistung zu optimieren und übermäßige DOM-Durchquerung zu vermeiden, wird empfohlen, nur den inneren Selektor an .closest() zu übergeben:

document.querySelector('#main').addEventListener('click', (e) => {
  if (e.target.closest('.focused')) {
    settingsPanel();
  }
});
Nach dem Login kopieren

Codestruktur vereinfachen

Aus Gründen der Lesbarkeit ist es üblich, die Bedingung zu überprüfen innerhalb einer vorzeitigen Rückgabeerklärung:

document.querySelector('#main').addEventListener('click', (e) => {
  if (!e.target.closest('.focused')) {
    return;
  }
  // Remaining code of settingsPanel here
});
Nach dem Login kopieren

Leistungsvergleich

Im Vergleich zur angebotenen Alternativlösung in der Frage (document.getElementById('main').addEventListener('click', doThis);) bietet diese Methode eine verbesserte Leistung, da sie Event-Bubbling verwendet und die Iteration durch zahlreiche untergeordnete Elemente innerhalb von #main vermeidet.

Live-Demo

Um den Unterschied zu veranschaulichen, können Sie auf den Live-Demo-Ausschnitt in der Antwort verweisen. Beim Klicken auf das innere Element (#inner) protokollieren sowohl die Vanilla-JavaScript- als auch die jQuery-Ereignishandler ihre jeweiligen Nachrichten in der Konsole.

Das obige ist der detaillierte Inhalt vonWie verbessert die Vanilla-JavaScript-Ereignisdelegierung die Leistung gegenüber mehreren einzelnen Ereignis-Listenern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage