2012-10-10 1 views
5

은 최근 특정 jQuery 누수가 $.cache 변수를 통해 추적 가능한 것을 this tutorial에서 읽고, 당신은 항상 너무 큰 있다면, 당신이 뭔가 잘못하고있어, 그 크기를 확인해야합니다.

음, 너무 큰 얼마나 큰? 변수를 조사하여 얼마나 많은 메모리를 먹고 있는지 확인하는 방법이 있습니까?

난 단지 홈페이지를로드하여210 개 객체를 캐시 웹 사이트에 일하고 있어요. 너무 많습니까? 이 문제에 대한 철저한 설명을 부탁드립니다. 액면

+0

그것은 얼마나 큰 그것이 대해 아니지만, 어떻게 시간이 지남에 따라 성장한다. 캐시가 제한되지 않으면 (즉, 영원히 증가하는 경우) 아마도 메모리 누수가 발생했을 것입니다. –

+1

jQuery는 진정으로 브라우저와 호환됩니다. 모든 브라우저에 요소를 올바르게 처리하는 IE 문제가 발생합니다. –

+0

당신이 현명한 사람이라면 현대의 기억 능력에 압박감을주지 않을 것입니다. 물론 충분한 메모리 누수가 발생하지 않는 한. 마법 같은 양의 메모리는 없으며 모두 사용자의 하드웨어에 달려 있습니다. 90 년대 컴퓨터를 사용하는 사람들에 관심이 있습니까? –

답변

3

$.cache의 크기는 메모리 누수에 대해 아무것도 말해주지 않습니다. 매우 작을 수 있으며 메모리 누수가 있거나 매우 클 수 있으며 메모리 누수가 없습니다.

한 번에 페이지에서 jQuery와 연결된 10 개의 이벤트 리스너를 알고 있고 $.cache에 더 많은 항목이있는 경우, 누출이 있음을 알 수 있습니다.

거대한 메모리 보호기는 각 개별 요소에 이벤트 리스너를 부착하는 대신 이벤트 위임을 사용하는 것입니다.

말 :

<ul> 
    <li></li> 
    <li></li> 
    <li></li> 
</ul> 

$("li").on("click", fn) 3 각 이벤트 핸들러를 아직 관계없이 얼마나 많은 리튬 요소 중 하나를 첨부 것, $("ul").on("click", "li", fn) 반면에 (당신이 리 과정의 더 많은 사항이 있다면,)가 부착 것이다 같은 결과. 누출


예 :

$("button").click(function() { 
    $("#target")[0].innerHTML = ""; 
    $("<div>").appendTo($("#target")).click($.noop); 
    $("#log").text(Object.keys($.cache).length); 
});​ 

http://jsfiddle.net/SGZW4/1/

이유 .innerHTML가 정리되지 않은 수의 jQuery 부분하지 않다 사용되는 것이 되.

수정 같은 대한의 jQuery 방법을 사용하는 것입니다

$("button").click(function() { 
    $("#target").html(""); 
    $("<div>").appendTo($("#target")).click($.noop); 
    $("#log").text(Object.keys($.cache).length); 
});​ 

http://jsfiddle.net/SGZW4/2/

+0

좋은 팁입니다. 하지만 .cache 변수를 사용하여 메모리 사용을보다 자세히 조사하려면 어떻게해야합니까? 방금 생각한 한 가지 예는 다음과 같습니다. 캐싱 된 요소의 수를 확인하고 버튼을 클릭하고 예상되는 시각적 동작을 확인한 다음 다시 캐싱 된 요소의 수를 확인하고 이전 작업을 "재설정"하는 버튼을 클릭 한 다음 캐시 된 요소 번호는이 시험 시작과 동일합니다. 예를 들어 $ .cache를 사용하여 메모리 사용을 테스트하는 것이 맞습니까? – ChuckE

+0

@ChuckE $ .cache에 대해서는 걱정할 필요가 없습니다. 모든 것을 피하는 한 가지 방법은 처음에는 절대 제거되지 않는 정적 요소에 이벤트 위임을 독점적으로 사용하는 것입니다. 그렇지 않으면 jQuery 메서드가 표준 DOM이 아닌 항상 사용되는지 확인하십시오. http://jsfiddle.net/SGZW4/1/ vs http://jsfiddle.net/SGZW4/2/ – Esailija

+0

humm, interesting. 즉, 테스트 한 경우 $ .cache는 메모리 누수가 있는지 확인할 수 없습니다. – ChuckE

관련 문제