2011-12-17 12 views
16

Si adjunté un grupo de eventos a algunos elementos DOM -y luego los eliminé- ¿se seguirá utilizando la memoria utilizada para los manejadores de eventos u otros atributos?¿Javascript elimina los controladores de eventos de los elementos DOM eliminados?

Pregunto porque quiero saber si utilizaré un montón de memoria si sigo rellenando un área de una página con elementos nuevos de solicitudes AJAX y eventos vinculantes para ellos, solo para eliminarlos y repetir el proceso cuando aparece un nuevo resultado AJAX.

+0

Esto no es una respuesta directa, pero si va a añadir continuamente nuevos elementos y la eliminación de los viejos, me gustaría sugerir el uso de la delegación de eventos manejar eventos. Evita este problema por completo. – RightSaidFred

+0

... dicho eso, si es posible, trataría de encontrar una manera de reutilizar los elementos en lugar de destruir y volver a crear. – RightSaidFred

+0

@RightSaidFred, sí, si los elementos estuvieran relacionados, podría reutilizar la mayoría de los eventos utilizando la delegación. Sin embargo, estas son páginas de carga completamente diferentes para mí. – Xeoncross

Respuesta

5

Sí, los navegadores modernos (eventualmente) liberan la memoria utilizada por los manejadores de eventos en los nodos DOM. Sin embargo, las versiones antiguas de Internet Explorer no, por lo que siempre es una buena práctica eliminar los detectores de eventos antes de eliminar los nodos del DOM.

Este es un buen artículo para entender lo que está pasando: http://msdn.microsoft.com/en-us/library/bb250448(v=vs.85).aspx

+6

Un comentario menor: el comportamiento erróneo de IE estaba relacionado con los manejadores de eventos con referencias a los elementos a los que estaban conectados. –

+1

La fecha de publicación de ese artículo es junio de 2005. Esta respuesta es de 2011. "versiones antiguas de Internet Explorer" es un poco ambigua, pero supongo que significaría [IE 8] (https://en.wikipedia.org/wiki/ Internet_Explorer_8) o anterior dado IE 9 fue el último estable en 2011. Esta sigue siendo una pregunta un tanto abierta para mí ... – efx

Cuestiones relacionadas