Encontré algunas preguntas con respecto a live
y bind
, pero ninguna de ellas se refería al rendimiento. Creo que el título es bastante claro, así que ¿hay un impacto en el rendimiento al usar live
en jQuery? Por qué estoy preguntando esto es porque tienes que hacer la búsqueda cada vez que se dispara el evento cuando usas live
y mi idea es que esto podría afectar el rendimiento de una manera negativa. ¿O están jQuery haciendo cosas mágicas que aceleran esto, como escuchar algún tipo de evento que se dispara cuando se agrega algo al DOM?¿Hay algún impacto en el rendimiento en el uso de Live en lugar de vincular jQuery?
Respuesta
En general, tiene un mejor rendimiento general para usar .live()
/.delegate()
cuando tiene muchos elementos (...) en su sitio que necesitan tener un controlador de eventos.
Es más costoso enlazar manejadores de eventos 50x a 50 nodos diferentes que solo vincular un manejador de eventos a un elemento primario común de estos 50 elementos (que básicamente es lo que .live()
hace).
Ahora uno podría argumentar, "bueno, genial, pero esto viene con burbujas de eventos generales", lo cual es absolutamente correcto. Es por eso que se introdujo .delegate()
. .live()
siempre vincula un controlador al document.body
que obviamente es el padre de cualquier nodo secundario en su marcado. .delegate()
, sin embargo, toma un argumento, donde puede especificar el "mínimo común denominador", que significa el nodo principal más cercano que comparten los elementos que desea tener un controlador de eventos. Esto reduce la sobrecarga en realidad a cero.
Tengo que admitir que nunca comparé (todavía) en qué punto tiene sentido utilizar una "vinculación en vivo". Pero, una vez más, tiene sentido tan pronto como tenga más de un elemento para vincular manejadores. Solo el hecho de que solo haya UNA función en lugar de N me parece conveniente.
Mirándolo desde la perspectiva de la memoria, live
tiene un mejor rendimiento. bind
tiene que adjuntar el mismo evento a cada elemento en la selección de destino.
Desde una perspectiva de rendimiento real, el live
tiene una sobrecarga pequeña con una verificación is
, pero esto debería ser insignificante.
Este es un muy simplificado enfoque live
-como:
function live(event, selector, callback) {
$(document).bind(event, function() {
if ($(this).is(selector)) {
return callback();
}
});
}
La forma .live obras es: evento está unido a uno de los nodos principales. Así que, en realidad, no hay búsqueda cada vez que se activa un evento, pero a costa de que este método sea menos compatible, pero IE. Le sugiero que se quede con .bind. Si tiene que vincular el evento a muchos elementos, utilice .delegate método.
docsEl jQuery explican exactamente cómo funciona:
métodoEvento Delegación El .live() es capaz de afectar a los elementos que aún no se han añadido a la DOM a través del uso de la delegación de eventos: una el controlador vinculado a un elemento ancestro es responsable de los eventos que se desencadenan en sus descendientes. El controlador pasado a .live() nunca está vinculado a un elemento; en su lugar, .live() vincula un controlador especial a la raíz del árbol DOM.En nuestro ejemplo, cuando se hace clic en el elemento nuevo, se producen los pasos siguientes:
- Se genera un evento de clic que se pasa al gestor.
- Ningún controlador está directamente ligado a, por lo que el evento aparece en el árbol DOM.
- El evento surge hasta que llega a la raíz del árbol, que es donde .live() vincula a sus controladores especiales de manera predeterminada.
- A partir de jQuery 1.4, el burbujeo de eventos puede detenerse opcionalmente en un elemento DOM "context".
- Se ejecuta el controlador de clic especial vinculado por .live().
- Este controlador prueba el destino del objeto de evento para ver si debe continuar. Esta prueba se realiza al verificar si $ (event.target) .closest ('. Clickme') puede ubicar un elemento coincidente.
- Si se encuentra un elemento coincidente, se llama al controlador original.
Como la prueba en el paso 5 no se realiza hasta que se produce el evento, los elementos se pueden agregar en cualquier momento y aún así responder a los eventos.
Así que, tipo de lo primero que dijiste. Verifica cuándo ocurre el evento.
- 1. Log.d e impacto en el rendimiento
- 2. ¿Cuánto impacto tiene el uso de 'var' en el rendimiento del compilador de C#?
- 3. ¿Minimiza el rendimiento de impacto de Node.js?
- 4. ¿Tiene ACL en Linux un impacto en el rendimiento?
- 5. Rendimiento SQL: ¿Hay algún golpe de rendimiento usando NVarchar (MAX) en lugar de NVarChar (200)
- 6. ¿Impacto de hyperthreading en el rendimiento del compilador?
- 7. Tamaño grande de Permgen + impacto en el rendimiento
- 8. ¿Cuál es el impacto en el rendimiento de los Contadores de rendimiento
- 9. ¿Tiene algún impacto en el rendimiento de Oracle al usar LIKE 'cadena' vs = 'cadena'?
- 10. Impacto en el rendimiento de copiar variables de php
- 11. palabra clave 'nueva' en getter> impacto en el rendimiento?
- 12. ¿Hay algún uso de mónadas en el entorno .net?
- 13. Uso de jQuery .live con el evento de alternar
- 14. Impacto en el rendimiento del cambio a interfaces genéricas
- 15. UILabel layer cornerRadius tiene un impacto negativo en el rendimiento
- 16. ¿Hay algún inconveniente en el uso de funciones anónimas en JavaScript? P.ej. ¿uso de memoria?
- 17. ¿Cuál es el impacto en el rendimiento del uso del patrón de clase de tipo en Scala
- 18. ¿Cómo el nombre de una variable tiene algún impacto en el uso de la memoria de una aplicación?
- 19. ¿El tamaño declarado de un campo varchar tiene algún impacto en PostgreSQL?
- 20. Marcadores vs. Puntos vectoriales - impacto en el rendimiento
- 21. ¿Hay algún resultado de prueba de rendimiento para el uso de sugerencias probables/improbables?
- 22. ¿Cuál es el impacto en el rendimiento de habilitar sesiones en Google App Engine?
- 23. ¿Cuál es el impacto en el rendimiento del rastreo en C# y ASP.NET?
- 24. ¿Hay algún beneficio al usar prototipos en lugar de declarar propiedades en el objeto mismo?
- 25. Diferencia de rendimiento entre .live ('clic', fn) y .click (fn) de jQuery
- 26. Impacto de rendimiento de -fno-strict-aliasing
- 27. Repercusión en el rendimiento del uso de Workflow Foundation
- 28. Jquery live() vs delegate()
- 29. ¿Hay alguna forma de pasar el contexto para vincular jQuery?
- 30. ¿Hay algún límite en el número de propiedades en una clase .NET?
Gran respuesta, esperaré para ver si hay alguien que haya hecho alguna evaluación comparativa. Pero creo que eres acertado. –