2009-06-27 3 views
7

나는 remove() 함수를 사용할 때 일치하는 요소가 DOM뿐 아니라 jQuery 객체에서도 제거된다는 것을 발견했다. remove() documentation 따르면

:

는 DOM 모든 유사한 요소를 제거한다. 이 경우 에서 jQuery 객체가 제거되지 않으므로 요소를 더 사용할 수 있습니다.

웹 응용 프로그램이 계속 DOM에 요소를 추가하고 제거하면 계속해서 더 많은 메모리를 사용하게됩니까? 이것이 사실인지 누군가 확인할 수 있습니까? 이것을 피하기 위해 무엇을 할 수 있습니까?

답변

7

에 제기 된 것 같았다. 과도한 메모리 사용에 문제가있는 경우 반환 된 객체에서 delete 연산자를 사용해보십시오.

+0

예. DOM은 변경되었지만 jQuery 객체는 변경되지 않습니다. jQuery 객체를 변수에 할당 한 경우 가비지 컬렉터는 범위를 벗어날 때 해당 변수에 대한 샷을 가져야합니다. – Nosredna

2

약간의 테스트를 통해 내 자신의 질문에 대한 답변을 찾으려고했습니다. delete operator (tvanfosson의 제안 덕분에)

var test = $('#test_'+($i-1)).remove(); 

와 함께 :

<script type="text/javascript"> 
$(document).ready(function() { 
    for ($i=1; $i<10000; $i++) { 
     $('table').append("<tr id=\"test_" + $i + "\"><td>test " + $i + "</td></tr>"); 
     $('#test_'+($i-1)).remove(); 
    } 
}); 
</script> 
<table> 
    <tr><td id="test_0">test 0</td></tr> 
</table> 

내가 사용하여 제거()에 변화를했다

var test = $('#test_'+($i-1)).remove(); 
delete test 

이 테스트를 수행 데 나는 아직도 것 그냥 remove()를 사용하십시오. 페이지를 다시로드 한 후에 브라우저의 메모리 사용량이 항상 증가했기 때문에 메모리 누수가 있었는지 알기가 매우 어렵습니다. 아마도 다른 사람이 코드를 다르게 테스트하여보다 확실한 답을 제공 할 수 있습니다.

관련 문제