2011-01-27 13 views
11

Recientemente he discovered que livequery plug-in para jQuery puede ser muy derrochador, ya que no utiliza delegación de eventos, pero obliga a todos los eventos que pueden vincularse y vuelve a verificar toda la DOM en cada cambiolivequery rendimiento

si alguien tiene más información o sugerencias sobre mejores prácticas usando livequery y .live(), estaría muy agradecido

+1

Como se señala en la respuesta de "patrick dw" a continuación, el .live() y .delegate() son casi integración del mismo autor de livequery en el núcleo. Consulte su blog aquí: http: // brandonaaron. net/blog al menos tal como lo entiendo :) –

Respuesta

11

Es raro que realmente necesite un complemento como livequery. Probablemente la única vez que realmente lo necesite es si necesita reaccionar a los cambios en el DOM realizados por algún otro código jQuery que no puede modificar.

Mientras .live() hace uso delegación caso, lo hace en el nivel document, lo que significa que necesita para procesar todos los eventos en la página para ver si coinciden con los selectores provistos según el tipo de evento.

Una mejor alternativa (IMO) para ambos es el método delegate()(docs) que usa delegación de eventos como .live(), pero le permite restringirlo a una parte específica de la página.

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

Tenga en cuenta que los métodos de delegación de eventos responden a los eventos del navegador, no a los cambios en el DOM. Si necesita ejecutar algún código basado en un cambio en el DOM que ha realizado, necesita ejecutar ese código cuando realiza esa alteración al DOM.

+3

+1, tiene sentido para mí ver: http://brandonaaron.net/blog para más información sobre la delegación. –

+0

Esta es una gran respuesta, pero tenga en cuenta que este enfoque solo funcionará para los eventos que surgen. Algunos eventos, como 'no válido' (activado cuando un elemento del formulario falla la validación) no aparecen, y por lo tanto no se pueden capturar a través de la delegación. –