의도적으로 하나의 수명 주기를 반복합니다.
로딩 후 기준선을 캡처하고, 동일한 짧은 레벨을 플레이하고, 메뉴로 돌아가서 정확한 경로를 여러 번 반복하세요. 도구에서 허용하는 경우 브라우저 메모리 도구를 사용하여 정리 및 가비지 수집 후 동일한 지점에서 찍은 스냅샷을 비교합니다. 총 메모리에만 반응하기보다는 장면 노드와 같은 특정 객체 유형의 수가 증가하는 것을 찾으십시오.
개발자 도구를 닫은 상태에서 테스트를 한 번 실행하고, 측정 자체가 동작을 변경하는 것으로 나타나면 한 번 열어보세요. 유용한 신호는 동일한 클래스와 유지된 경로가 주기 전반에 걸쳐 누적되는지 여부이지, 하나의 스냅샷이 다른 시스템의 것보다 더 큰 수를 가지고 있는지 여부가 아닙니다.
각 장면의 종료 정리를 명시적으로 처리하세요
장면이 끝날 때 대기 중인 애니메이션 프레임을 취소하고, 타이머를 중지하며, 더 오래 살아남는 대상에 등록한 리스너를 제거하고, 장면 엔티티가 들어 있는 컬렉션을 비우세요. 나중에 제거할 수 있도록 콜백 참조를 보관하거나 관련 리스너를 AbortController로 묶어 장면을 종료할 때 그룹을 중단하세요.
경계를 테스트하세요. 장면에 들어갔다 나와 이전 입력 동작을 발생시킨 뒤 이전 장면이 더는 반응하지 않는지 확인합니다. 캐시 자산도 의도적으로 공유하거나 해제하는지 점검하세요. 무분별한 정리는 불필요한 재로드를 일으키고, 실수로 남긴 참조는 큰 장면을 메모리에 계속 붙잡아 둘 수 있습니다.
브라우저 게임 메모리 누수 관련 질문
메모리가 올라가면 누출이 증명되나요?
아니요. 브라우저는 메모리를 예약하고 자체 일정에 따라 객체를 회수합니다. 같은 생명주기를 반복할수록 코드가 여전히 보유한 참조 경로를 통해 인스턴스가 점점 더 많이 남는다면 누수일 가능성이 높습니다.
이벤트 리스너를 제거하면 정리에 도움이 되나요?
수명이 긴 객체가 장면 데이터를 참조하는 콜백을 보유하는 경우 도움이 됩니다. MDN은 removeEventListener()를 설명하며 AbortSignal을 전달해 여러 리스너를 한꺼번에 제거하는 방법도 소개합니다.
추가 읽을거리
오래된 정보를 발견하셨나요? 수정 사항 제보