Sollte ich das Ereignis .on ('click') an das Dokument oder Element anhängen

8

Gestern habe ich die jQuery-Dokumentation für .on () gelesen, wo gesagt wurde:

  

Vermeiden Sie eine übermäßige Verwendung von document oder document.body für delegierte Ereignisse in großen Dokumenten

Aber heute schaute ich mir diese JSPERF an und ich merke eine bessere Leistung wenn das Klickereignis an das Dokument angehängt ist.

Im Moment bin ich verwirrt. Die Leistungstests sprechen gegen die Dokumente?

    
Gigi2m02 03.07.2013, 08:34
quelle

3 Antworten

7

Ihr JSPerf testet hier die Geschwindigkeit, mit der Ereignisse angehängt werden, und nicht den Effekt, den sie auf die kumulative Seitenleistung haben. Das ist die falsche Sache zu testen!

Javascript-Ereignisse verbreiten das DOM den ganzen Weg bis zum Dokumentenstamm. Das heißt, wenn Sie einen on("click", ...) -Handler auf document haben, dann führt jeder Klick auf jedes Element im Dokument am Ende einen Event-Handler aus, so dass jQuery das kann Testen Sie, ob der Ursprung mit dem Delegatziel übereinstimmt, um zu sehen, ob es an diesen Ereignishandler übergeben werden sollte.

Stellen Sie sich vor, dass Ihre Seite zehn verschiedene delegierte Ereignishandler für das Dokument enthält, die alle verschiedene Klicks verarbeiten. Jedes Mal, wenn Sie auf ein Element auf der Seite klicken, wird das Ereignis in den Dokumentenstamm verschoben, und alle 10 dieser Handler müssen getestet werden, um herauszufinden, welche (falls überhaupt) ausgeführt werden sollen.

Im Allgemeinen möchten Sie, dass sich Ihre delegierten Ereignisse so tief wie möglich in der Struktur befinden, während Sie weiterhin Ihre Funktionalität aktivieren, da dadurch die Anzahl der Elemente begrenzt wird, die dieses Ereignis aufrufen können, und Sie das Ereignis früher behandeln können den DOM-Baum weiter verbreiten.

    
Chris Heald 03.07.2013, 08:42
quelle
0

Es kommt darauf an. Natürlich können Sie den Handler an jedes gewünschte Element anhängen, und in manchen Fällen müssen Sie ihn an document oder body anhängen (wenn Sie zum Beispiel alle als Ziel festlegen möchten Links auf der Seite). Wenn Sie jedoch sicher sind, dass bestimmte Elemente immer nur innerhalb eines gegebenen Elements (das bereits erstellt wurde) angezeigt werden, können Sie der Leistung halber den Ereignishandler diesem gemeinsamen übergeordneten Element zuordnen.

    
mishik 03.07.2013 08:38
quelle
0

Der Punkt ist exzessiv .

IMHO exzessive Delegierten in einem DOM ist schrecklich

    
rhapsodyn 03.07.2013 08:39
quelle