$.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/
그것은 얼마나 큰 그것이 대해 아니지만, 어떻게 시간이 지남에 따라 성장한다. 캐시가 제한되지 않으면 (즉, 영원히 증가하는 경우) 아마도 메모리 누수가 발생했을 것입니다. –
jQuery는 진정으로 브라우저와 호환됩니다. 모든 브라우저에 요소를 올바르게 처리하는 IE 문제가 발생합니다. –
당신이 현명한 사람이라면 현대의 기억 능력에 압박감을주지 않을 것입니다. 물론 충분한 메모리 누수가 발생하지 않는 한. 마법 같은 양의 메모리는 없으며 모두 사용자의 하드웨어에 달려 있습니다. 90 년대 컴퓨터를 사용하는 사람들에 관심이 있습니까? –