오랜 시간 환영의 인사 였지만이 사이트를 자주 방문하는 사용자. 여기 좋은 정보. 나는 처음으로 실제 웹 프로젝트를 진행하고 내가 배우는대로 학습하고있다.이미지를 숨기거나 표시 할 때 Chrome 메모리 누수가 발생했습니다.
이것은 때때로 문제가 될 수있는 환자에게주의를 끌기 위해 경보 아이콘 (이미지가 포함 된 div)을 표시해야하는 의료용 응용 프로그램입니다. 나는 CSS 클래스를 사용하여 적절한 아이콘을 보여주기 위해 다음 JS/jQuery 코드를 사용 해왔다. 내 CSS 기술은 훌륭하지 않으므로 더 효율적으로 수행 할 수는 있지만 내 질문의 핵심은 아닙니다.
각 업데이트 후 setTimeout을 사용하여 128 명의 환자에 대해 다음 코드를 500msec 간격으로 실행하면 Chrome 렌더링 프로세스가 약 50MB/시간 (작업 관리자 또는 SysInternals Process Explorer 당)의 메모리를 사용합니다. 그러나 Chrome 개발자 도구는 메모리 사용량이나 DOM 노드 수를 늘리지 않습니다. 힙 스냅 샷은 시간이 지남에 따라 큰 변화를 보이지 않습니다. 그러나이 부분을 언급하면 "누출"이 사라집니다.
무엇이 누락 되었습니까?
// Show appropriate alarm icon, or hide all
iconClass = null;
if (this.Status && displayMode === 'RealTime') {
if (this.Status.Alarm === 'Active') {
flashState = ((this.drawTickCount % 4) < 2);
iconClass = (flashState) ? 'alarmOn' : 'alarmOff';
}
else if (this.Status.Alarm === 'Paused') {
iconClass = 'alarmPaused';
}
}
// Hide all icons
this.div.find('div.alarmIcon').css('visibility', 'hidden');
// Show the active icon, if any
if (iconClass) {
this.div.find('div.' + iconClass).css('visibility', 'visible');
}
고마워요!
스크립트가 수행하는 유일한 작업입니까? – qwertynl
jsfiddle.net 예를 들어 이런 일이 일어 났습니까? –
메모리 누수의 원인인지는 모르겠지만'iconClass'와'flashState' 글로벌 변수를 만들고 있습니다. 이것은 나쁜 습관입니다. 'var iconClass = null; 그리고'var flashState = ((this.drawTickCount % 4) <2); ' – RustyToms