> 웹 프론트엔드 > JS 튜토리얼 > JavaScript의 일반적인 메모리 누수

JavaScript의 일반적인 메모리 누수

Mary-Kate Olsen
풀어 주다: 2025-01-08 14:35:40
원래의
920명이 탐색했습니다.

Common Memory Leaks in JavaScript

1. 전역변수

전역 변수는 애플리케이션 수명 내내 유지되며 가비지 수집되는 경우가 거의 없습니다. 변수의 범위가 적절하지 않으면 우발적인 메모리 누수가 발생할 수 있습니다.

function myFunc() {
    globalVar = "I'm a memory leak!";
}
로그인 후 복사

2. 분리된 DOM 노드

제거된 DOM 노드는 더 이상 표시되지 않더라도 JavaScript에서 참조되는 경우 메모리에 남아 있을 수 있습니다.

let element = document.getElementById("myElement");
document.body.removeChild(element); // Node removed but still referenced
로그인 후 복사

3. 타이머 및 콜백

setIntervalsetTimeout은 콜백 및 변수에 대한 참조를 유지하므로 장기 실행 애플리케이션에서 메모리 누수를 일으킬 가능성이 있습니다.

let intervalId = setInterval(() => {
    console.log("Running indefinitely...");
}, 1000);

// Clear when no longer needed
clearInterval(intervalId);
로그인 후 복사

4. 폐쇄

클로저는 의도치 않게 외부 함수의 변수에 대한 참조를 유지하여 메모리 문제를 일으킬 수 있습니다.

function outer() {
    let bigData = new Array(100000).fill("data");
    return function inner() {
        console.log(bigData.length);
    };
}
로그인 후 복사

여기서 내부는 더 이상 필요하지 않은 빅데이터를 보유합니다.

메모리 누수 방지 및 수정 전략?

1. 전역변수 최소화

불필요한 메모리 지속성을 방지하려면 변수에 로컬 범위(함수 또는 블록)를 사용하세요.

2. 분리된 DOM 노드에 대한 참조 지우기

제거된 DOM 노드를 참조하는 변수가 null으로 설정되어 있는지 확인하세요.

document.body.removeChild(element);
element = null; // Clear the reference
로그인 후 복사

3. 타이머 및 이벤트 리스너 관리

더 이상 필요하지 않은 경우 항상 타이머를 지우고 이벤트 리스너를 제거하세요. 특히 동적 단일 페이지 애플리케이션에서는 더욱 그렇습니다.

let timer = setInterval(doSomething, 1000);
// Clear when no longer needed
clearInterval(timer);
로그인 후 복사

4. 가능하면 대규모 폐쇄를 피하세요

대규모 데이터 구조를 불필요하게 유지하지 않도록 코드 폐쇄 또는 재구성 범위를 최소화하세요.


도움이 되셨기를 바랍니다. 읽어주셔서 감사합니다. ?
연결해 봅시다! 다음에서 저를 찾으실 수 있습니다:

  • 매체: https://medium.com/@nhannguyendevjs/
  • 개발자: https://dev.to/nhannguyendevjs/
  • 링크드인: https://www.linkedin.com/in/nhannguyendevjs/
  • X(이전 Twitter): https://twitter.com/nhannguyendevjs/
  • 커피 사주세요: https://www.buymeacoffee.com/nhannguyendevjs

위 내용은 JavaScript의 일반적인 메모리 누수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿