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?
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.
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.
Tags und Links javascript jquery javascript-events