2012-10-09 51 views
5

Tengo un DOM relativamente grande y he notado una increíble degradación del rendimiento en Chrome al activar eventos en un elemento. Un único por ejemplo evento:La activación de eventos de Chrome demora años en DOM grande

myElem.trigger('myevent.myscope',arguments); 

toma 14ms !! (22.0.1229.92 m)

¡el mismo evento en firefox 15.0.1 y msie 9 tardan menos de 1ms en activarse!

El elemento es un objeto jquery y se ha almacenado en caché por lo que no hay búsqueda de DOM antes del desencadenador. Estoy usando console.time()

console.time('trigger'); 
myElem.trigger('myevent.myscope',arguments); 
console.timeEnd('trigger'); 

Puede alguien arrojar un poco de luz sobre esta situación

Gracias

Gary

+0

¿Puedes publicar tu código de escucha de eventos? – Derek

+0

@Derek El evento se desencadena pero no siempre hay un detector de eventos para el evento. La activación del evento tiene lugar dentro de un widget, p. 'loaded.mywidget' algunas veces hay un detector de eventos y otras veces no. Podría ser obligado hacer el cuerpo o directamente en el elemento que tiene el widget. – garyrgilbert

+1

Es difícil verificar el rendimiento cuando no hay código para probar ... ¡buena suerte! – Derek

Respuesta

1

Esto no no es una respuesta directa a su pregunta.

Pero en mi experiencia con respecto a los eventos personalizados, evitaría el uso de eventos trigger/jquery.

Dependiendo de la versión de jQuery. El disparo burbujea en el árbol dom, esto puede tomar bastante tiempo.

"A partir de jQuery 1.3, .trigger() eventos ed burbuja hasta el árbol DOM; un controlador de eventos puede detener el burbujeante devolviendo falsa desde el controlador o llamando al método .stopPropagation() en el evento objeto pasado al evento "-. trigger

Mi personalmente solución es usar Peter Higgins Pubsub.

creé una prueba jsperf que muestra la diferencia en el rendimiento de jquerys 'on' (azul es pubsub, el rojo es jQuery, más largo es mejor [operaciones por segundo]); PUBSUB vs Jquery http://jsperf.com/peter-higgins-pubsub-vs-tiny-pubsub

A partir de ahora yo uso pubsub cuando se trata de eventos personalizados, y jQuery cuando se trata de hacer clic, ratón sobre, etc eventos.

Just my 2cents.

+0

Aunque técnicamente no es la respuesta, estoy marcando esto como una respuesta ya que es una "solución" al problema. En lugar de desencadenar eventos que pueden o no tener un oyente, un enfoque de pubsub sería potencialmente mucho más ágil y evitaría mucho "ruido" en el DOM. – garyrgilbert

Cuestiones relacionadas