"자동 새로 고침"기능이있는 웹 페이지가 있습니다. 설정하면, 모든 사람은 두 번째 페이지는 아약스 (라고 page_request)를 통해 인출하고 제공 containerid와 사업부 컨테이너의 내용을 대체자바 스크립트 유출 유형 진단
는document.getElementById(containerid).innerHTML=page_request.responseText;
이, 대부분의 시간에 아무 문제가 작동하지 않습니다. 다음 스크립트는 page_response에있을 때
문제가 발생합니다 :
<script type=\"text/javascript\">
$(document).ready(function() {
dtable = $('#multi-stat-table').dataTable();
});
</script>
이 스크립트는 정렬 테이블에 ID가 "멀티 통계 테이블"는 DataTables jQuery 플러그인을 사용하여 테이블을집니다. 스크립트가 작동하고 정렬 가능한 테이블이 있습니다. 그러나 자동 새로 고침이 켜져 있으면 메모리 누수가 발생하여 결국 전체 힙 (천천히 그러나 확실하게)을 소비하게됩니다.
이 현상은 top과 chrome의 메모리 프로파일 러를 사용하여 확인할 수 있습니다. 1 초마다 ~ 70KB 데이터가 할당되지만 ~ 20KB 만 해제됩니다. 따라서 초당 50KB 힙 메모리의 순 손실이 있습니다. 프로파일 러에서 메모리를 차지하고있는 객체를 살펴 보았지만 이러한 배열과 객체가 실제로 참조하는 것이 아닌 비 - 기술 번호를 파악하는 것은 매우 어렵습니다. 아무 소용,
내가 각 자동 새로 고침하기 전에 null로 dtable 설정을 시도했다 : 나는 가비지 수집기가 매초마다 말뚝 이들 않는 객체를 수집하는 방법을 알아낼 수 없었습니다 . 또한 dtable.api(). clear() 및 dtable.api(). destroy()를 호출하려고 시도했지만 누수가 지속됩니다. 이 누출을 어떻게 찾을 수 있습니까? 그리고 더 중요한 것은 그것을 막기 위해 무엇을 할 수 있습니까?
을 믹스 앤 매치 할 위험 할 수 있습니다 중간에 스크립트 태그를 포함하는 서버에서 HTML의 조각이 튀어 나와 한 번만 언급해도 아니지만 한 번이라도 귀하의 페이지를 읽는 것은 모든 종류의 나쁜 일이 발생하게하는 독창적 인 방법처럼 보입니다. –
알아,하지만 그것은 "레거시 코드" – RPGillespie