메모리 누출이란 무엇입니까?
웹 응용 프로그램에서
1. 영구 이벤트 리스너 :
내에서 청소 기능을 무시하면 누출이 발생할 수 있습니다.
메모리 누출 감지
<code class="language-javascript">function setupHandler() { const button = document.getElementById('myButton'); const heavyObject = { data: new Array(10000).fill('?') }; button.addEventListener('click', () => { console.log(heavyObject.data); }); } // Adds a new listener every 2 seconds – a leak! setInterval(setupHandler, 2000);</code>
크롬 데트 툴 :
<code class="language-javascript">function setupHandler() { const button = document.getElementById('myButton'); const heavyObject = { data: new Array(10000).fill('?') }; const handler = () => { console.log(heavyObject.data); }; button.addEventListener('click', handler); return () => button.removeEventListener('click', handler); } let cleanup = setupHandler(); setInterval(() => { cleanup(); cleanup = setupHandler(); }, 2000);</code>
의심이 의심 전후에 힙 스냅 샷을 캡처합니다
예방 모범 사례 항상 이벤트 리스너를 제거하고, 간격/시간 초과를 명확하게하고, 네트워크 요청을 취소하고, 연결을 닫습니다.
항상
useEffect
useEffect
및 <code class="language-javascript">function DataFetcher() {
const [data, setData] = useState(null);
useEffect(() => {
const fetchData = async () => {
const response = await api.getData();
setData(response); // Leak: updates state after unmount
};
fetchData();
}, []);
}</code>
<code class="language-javascript">function DataFetcher() {
const [data, setData] = useState(null);
useEffect(() => {
let isSubscribed = true;
const fetchData = async () => {
const response = await api.getData();
if (isSubscribed) setData(response);
};
fetchData();
return () => { isSubscribed = false; };
}, []);
}</code>
<code class="language-javascript">function createLargeObject() {
return new Array(1000000).fill('?');
}
function setupHandler() {
const largeObject = createLargeObject();
return () => { console.log(largeObject.length); };
}
const handler = setupHandler(); // largeObject persists</code>
메모리 누출은 교활하지만 예방할 수 있습니다. 적극적인 코딩 및 정기 모니터링은 고성능 웹 애플리케이션을 유지하는 데 중요합니다. 예방은 항상 치료보다 낫습니다.
추가 읽기 :
위 내용은 최신 웹 응용 프로그램에서 메모리 누출 이해 : 조용한 성능 킬러의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!