2009-03-13 5 views
4

다음 jquery 코드가 메모리 누수의 원인이되는지 궁금합니다.이 jQuery 코드 스 니펫으로 인해 메모리 누수가 발생합니까?

$(function() {     
    var parent=$('table#mytable tbody').get(0); 
    $('tr:last', parent).click(function(){...}); 
}); 

내 이해를 위해 $('tr:last', parent)는 DOM 개체의 마지막 행이지만 익명 함수에서는 클로저의 DOM 개체가 범위 내에 있습니다 따라서 DOM과 js 객체 사이에 순환 참조가 있습니다.

하지만 누수가 실제로 발생하면 Manning이 게시 한 인기있는 책 "jQuery in Action"에 많은 종류의 코드가 있음을 알 수 있습니다. jQuery 코딩에서 "모범 사례"는 해로운 것입니까?

하지만 내 이해가 정확한지 모르겠다. 나는 당신의 의견과 시정을 희망한다. 감사!

답변

2

이 코드는되지 않은 다른 브라우저 Douglas Crockford 이러한 aritcles을 참조하여 IBM Devloper Site

+0

파이어 폭스에는 이러한 누출이 있습니까? – jscoot

+0

아니 파이어 폭스는 그런 누출이 없다. 즉이있다. –

+0

질문은 jQuery에 관한 것이 었습니다. 적어도 2009 년 1 월에 릴리스 된 jQuery 버전에서이 코드는 유출되지 않습니다. 이 대답은 잘못되었습니다. 아래에서 정답을 참조하십시오. – umassthrower

1

IE가 누출 경향이있다하십시오에서 인터넷 익스플로러 6 및 인터넷 익스플로러 7에서 메모리 누수의 원인이됩니다. Microsofts javascript memory leak detector을 사용하여 IE에서 누수 코드를 테스트 할 수 있습니다.

Firefox도 누출 될 수 있습니다. This article에서 그 이유를 설명합니다. Firefox 용 leak detector plugin도 있습니다 (아직 테스트하지 않았습니다).

+0

Firefox 누출 감지기 플러그인을 테스트했습니다. stackoverflow가 많은 누출을 보여줍니다! – KooiInc

+0

은 우리 브라우저 엔진이 웹 2.0과 미래를 위해 개편해야한다고 생각합니다 :-) – jscoot

0

이전에 제출 한 답변 (3 년 전부터 한숨)이 잘못되었습니다. - jQuery를 1.0 있지만 1.2 여기 누출 것,이 질문은 다음 줄이 모든 이벤트 리스너를 추가 기능에 포함 http://download.oldapps.com/jquery/jquery-1.3.js 질문을 받았다 때부터 jQuery를 버전을보고 : 정확한 유출 방지 제안이

 // Nullify elem to prevent memory leaks in IE 
    elem = null; 

링크 된 문서에서.

관련 문제