Ich nehme an, dass es ineffizient ist, weil der Handler auf den Wurzelknoten gesetzt wird und auf Blasenbildung angewiesen ist, um das Ereignis abzufangen und den richtigen Handler auszuführen.
Eine Alternative wäre, Ihren Handler einfach mit bind
zu versehen, wenn sie erstellt und dem DOM hinzugefügt werden.
Eine andere Alternative besteht darin, einen einzelnen Handler an einen Container zu binden und Ihre Ereignisse dazu zu bringen. Dies kann nützlich sein, wenn Sie viele identische Elemente zu einem Container hinzugefügt haben.
%Vor% Binden Sie einen Klick-Handler an #myContainer
statt an jeden .myElement
.
Ich stelle fest, dass dies unter den gleichen Ineffizienzen wie .live()
leiden kann, aber es sollte besser sein, da es mehr lokalisiert ist. Neue .myElement
hinzugefügte Elemente funktionieren automatisch.
BEARBEITEN:
Laut den Dokumenten : Ab jQuery 1.4 kann Event-Bubbling optional bei einem DOM-Element "context" anhalten .
Dies scheint eine ähnliche Wirkung wie die zuletzt genannte Methode zu erzeugen.
BEARBEITEN:
Wie von Nick Craver vorgeschlagen, kann jQuerys .delegate()
Methode einen ähnlichen Effekt sauberer erzeugen.
Beispiel mit freundlicher Genehmigung von Nick:
%Vor% live()
wird möglicherweise nur dann als ineffizient betrachtet, wenn:
Wenn Ihr Anwendungsfall die obigen Kriterien erfüllt (insbesondere # 2), sollten Sie sich direkt an die Elemente binden und live()
vermeiden.
Ein Beispiel für das Benchmarking der Leistung von live()
, das Sie ausprobieren können, ist das Profiling eines Code-Fragments, das live()
verwendet, um einen click
-Handler an ein Element zu binden und ein weiteres Code-Fragment zu profilieren, das click()
verwendet. an dasselbe Element binden.
Ich bin mir nicht sicher, welches Endergebnis du haben wirst, aber ich bin mir sicher, dass es interessant sein wird.
Wie @patrick es vorschlägt, kann es ineffizient sein, da es die Verarbeitung für alle Ereignisse im Dokument erfordert, unabhängig davon, ob die Blase Ihr Element erreicht oder nicht.
Hier kann der Delegierte helfen, da er genauso funktioniert wie Live, aber nur einen kleineren Anteil davon auswirkt des Dokuments, indem es auf ein gemeinsames Elternteil beschränkt wird
(mit seinem Beispiel)
%Vor%