2016-03-26 10 views
3

Ich habe eine sehr dynamische Webanwendung, Elemente werden ständig erstellt und zerstört.

Um Klicks und andere Veranstaltungen machen bleiben, ich bin alle diese Ereignisse zu $ ​​(document) angebracht wird, wie in diesem Beispiel:

$(document).on('click', '.tabs li a', function(event) { 

}); 

Wie ich schon sagte, fast alle diese Ereignisse werden an $ (Dokument) angehängt .. gibt es irgendwelche Nachteile? Wo sind diese Ereignishandler gespeichert? Wird es meine Anwendung langsamer machen?

Antwort

1

Nein - dies wirkt sich negativ auf die Leistung Ihrer jQuery aus. Sie sollten nicht alle delegierten Ereignishandler an das Dokumentobjekt binden. Das ist wahrscheinlich das schlechteste Leistungsszenario, das Sie erstellen könnten. Wie in demhere im jQuery Abschnitt Leistung Ereignisses erwähnt Dokumentations-

viele delegierte Event-Handler Anbau an die document Leistung beeinträchtigen können. Jedes Mal, wenn das Ereignis auftritt, muss alle Selektoren aller angefügten Ereignisse dieses Typs mit jedem Element im Pfad vom Ereignisziel bis zum Anfang des Dokuments vergleichen. Fügen Sie für die beste Leistung delegierte Ereignisse an einem Dokumentstandort so nah wie möglich an die Zielelemente an.

Vermeiden Sie übermäßige Verwendung von document oder document.body für delegierte Ereignisse auf großen Dokumenten. Für die Verarbeitung delegierter Ereignisse ist es wesentlich effizienter, sie an das nächste übergeordnete Element zu binden, das nicht dynamisch ist. Eine erstaunliche detaillierte Beschreibung der Probleme finden Sie in this answer.

Hoffe, das hilft!

+0

Wie kann ich die Anzahl der Event-Handler an ein Objekt delegiert? – raphadko

0

tl; dr Bindende Listener weisen Speicher zu. Wenn Sie dies mit einer Menge von Listenern tun, die ständig an das Dokument gebunden sind, wird keiner dieser Listener ausgeschaltet, bis das Dokument entladen ist (d. H. Seitenaktualisierung, hartes Laden eines anderen Dokuments wie in Old School HTML). Schließlich in einem SPA, werden Sie in Speicherlecks und Browserabstürze

Verwandte Themen