2011-01-21 2 views
1

jQuery 1.4.4를 사용하고 있습니다. .get API를 사용하여 페이지에서 데이터를 새로 고쳐야하는지 확인하십시오. 문제는 내가 찾을 수없는 아래 스 니펫에 메모리 누수가있는 것입니다. 당신은 내가 무슨 일이 일어나고 있는지 파악하기 위해 타이머를 모두 삭제하고 다시 추가하는 것과 같이 잠재적으로 쓸모없는 것들을 많이 사용한다는 것을 알게 될 것입니다. .load를 수행하면 문제가 발생한다고 생각했지만이 시점에서 .get은 .get의 데이터가 "true"를 반환 할 때만 매우 자주 발생하지는 않습니다. 이는 매우 드문 경우이며 실제로 발생하지 않습니다. 내가 누출 메모리와 일치 나는 윈도우 작업 관리자를 사용하여 참조하십시오. 한가지주의해야 할 점은 Firefox를 사용하여 전혀 유출되지 않는다는 것이 IE 특유의 것 같습니다. IE 8을 사용하고 있지만 그다지 중요하지 않다고 생각합니다.jQuery .Get API 및 setTimeout 사용시 메모리 누수가 발생했습니다.

<script> 
$(document).ready(function() { 
    function CheckAlerts() { 
    //Must tell Ajax not to cache results 
    $.ajaxSetup({ cache: false }); 
    $.get("AjaxDataCheck/CheckForDataRefresh.cfm", { datacheck: "MyAlerts"}, 
     function(data) { 
     if (data.indexOf("true") >= 0) { 
     $.ajaxSetup({ cache: false }); 
     $('#responsecontainer').load('alertchecking_Inner.cfm'); 
     //Clearing the timer and recreating may force gargage collection. 
     clearTimeout(CheckAlertsTimer); 
     delete CheckAlertsTimer; 
     CheckAlertsTimer = setTimeout(CheckAlerts,2000); 
     } 
     else 
     { 
     //Clearing the timer and recreating may force gargage collection. 
     clearTimeout(CheckAlertsTimer); 
     delete CheckAlertsTimer; 
     CheckAlertsTimer = setTimeout(CheckAlerts,2000); 
     } 
     }); 
     CheckAlertsTimer = setTimeout(CheckAlerts,2000); 
    }; 
    CheckAlerts() 
}); 
</script> 

고마워요!

+0

클라이언트 측 또는 서버 측 누수 (즉, 브라우저 또는 JVM 프로세스)? – orangepips

+0

메모리 누수가 확실하지 않습니다. 이것이 사실이라고 생각하게하는 일은 무엇입니까? 브라우저와 서버 간의 통신을 확인하는 HTTP 도구가 있습니까? 그렇지 않으면 나는 바이올린 도구와 같은 것을 권할 것입니다. Google에서 빠른 검색을하면 다운로드 링크가 표시됩니다 (무료). 쓰레기 수거에 관한 귀하의 의견도 분분하다. javascript는 브라우저에서 실행되며 가비지 컬렉터 – Andrew

+0

orangepips가있는 관리 된 환경이 아니라는 것을 알고있는 한 클라이언트 쪽 누출입니다. 서버가 정상적으로 보입니다. iexplore.exe는 점점 더 많은 메모리를 계속 사용합니다. – Jeremy

답변

1

이 문제는 load() 함수가 dom 요소를 릴리스 할 때 발생하는 문제로 발생합니다. 이는 IE에만 ​​해당되며 해결 방법은 http://forum.jquery.com/topic/memory-leaks-with-ajax-calls으로보고 된

document.getElementById("responsecontainer").innerHTML = $('#responsecontainer').load('alertchecking_Inner.cfm'); 

입니다.

+0

이 $ .get()도 마찬가지입니다. – chriswiec

관련 문제