2011-01-27 12 views
11

Ho recentemente discovered che livequery plug-in per jQuery può essere molto dispendioso, in quanto non usa delegazione evento, ma si lega tutti gli eventi associabili e ri-verifica l'intera DOM su ogni cambiamentolivequery prestazioni

se qualcuno ha più informazioni o suggerimenti sulle best practice che utilizzano livequery e .live(), sarei molto grato

+1

Come indicato nella risposta di "patrick dw" di seguito, il .live() e .delegate() sono praticamente l'integrazione dello stesso autore di livequery nel nucleo - vedi il suo blog qui: http: // brandonaaron. net/blog almeno a quanto ho capito :) –

risposta

11

È raro che sia necessario un plug-in come livequery. Probabilmente l'unica volta che ne hai davvero bisogno è se devi reagire alle modifiche apportate al DOM fatte da qualche altro codice jQuery che non puoi modificare .

Mentre .live() fa delegazione uso evento, lo fa a livello document, il che significa che ha bisogno di elaborare tutti eventi nella pagina per vedere se corrispondono i selettori previste per tipo di evento.

Un'alternativa migliore (IMO) a entrambi è il metodo delegate()(docs) che utilizza la delega di eventi come .live(), ma consente di vincolarlo a una parte specifica della pagina.

$('#someContainer').delegate('a.someButton', 'click', function() { 
    // do something when an "a.someButton" inside "#someContainer" is clicked 
}); 

Si noti che i metodi di delega degli eventi rispondono agli eventi del browser, non alle modifiche al DOM. Se hai bisogno di eseguire del codice in base a una modifica al DOM che hai creato, devi eseguire quel codice quando apporti la modifica al DOM.

+3

+1, ha senso per me vedere: http://brandonaaron.net/blog per ulteriori informazioni sulla delega. –

+0

Questa è un'ottima risposta, ma tieni presente che questo approccio funzionerà solo per gli eventi che si presentano. Alcuni eventi, come "non valido" (attivato quando un elemento del modulo fallisce la convalida) non sono in bolla e quindi non possono essere acquisiti tramite delega. –