2011-12-17 2 views
16

일부 DOM 요소에 일련의 이벤트를 첨부 한 다음 제거하면 해당 이벤트 핸들러 나 다른 속성에 사용되는 메모리가 여전히 사용됩니까?자바 스크립트는 삭제 된 DOM 요소의 이벤트 처리기를 제거합니까?

AJAX 요청에서 새로운 요소가있는 페이지 영역을 다시 채우고 해당 이벤트를 바인딩하는 경우 많은 메모리를 사용할지 알고 싶습니다. 삭제하고 해당 프로세스를 반복 할 때만 프로세스를 반복하십시오. 새로운 AJAX 결과가 나타납니다.

+0

이 직접 대답하지 않습니다,하지만 당신은 지속적으로 새로운 요소를 추가하고 오래된 것들을 제거하는 경우, 내가 이벤트 대표단을 처리 사용하는 것이 좋습니다 것 이벤트. 이 문제를 완전히 피할 수 있습니다. – RightSaidFred

+0

... 가능하다면 파괴하고 재창조하는 대신 요소를 재사용 할 수있는 방법을 찾으려고합니다. – RightSaidFred

+0

@ RightSaidFred, 예 - 요소가 전혀 관련되지 않은 경우 위임을 사용하여 대부분의 이벤트를 재사용 할 수 있습니다. 그러나 이들은 완전히 다른 페이지 로딩 중입니다. – Xeoncross

답변

5

예, 최신 브라우저는 결국 DOM 노드에서 이벤트 처리기에서 사용하는 메모리를 릴리스합니다. 그러나 이전 버전의 Internet Explorer에서는 그렇지 않으므로 DOM에서 노드를 제거하기 전에 이벤트 리스너를 제거하는 것이 좋습니다.

이 무슨 일이 일어나고 있는지 이해하는 좋은 기사입니다 : http://msdn.microsoft.com/en-us/library/bb250448(v=vs.85).aspx

+6

사소한 의견 : IE의 잘못된 동작은 첨부 된 요소에 대한 참조를 보유한 이벤트 처리기와 관련이 있습니다. –

+1

이 기사의 발행일은 2005 년 6 월입니다.이 답변은 2011 년부터 있습니다. "Internet Explorer의 이전 버전"은 약간 모호하지만 [IE 8] (https://en.wikipedia.org/wiki/)을 의미하는 것으로 추정됩니다. Internet_Explorer_8) 또는 그 이전에 IE 9가 2011 년에 가장 안정적인 것으로 나타났습니다. 이것은 나에게 여전히 열려있는 질문입니다 ... – efx

관련 문제