Bleeding edge

문서와 리소스의 로딩 본문

Javascript

문서와 리소스의 로딩

codevil 2022. 4. 22. 20:50

HTML의 Document는, 

1. DOMContenLoaded

2. load

3. beforeunload

4. unload

이렇게 네가지의 이벤트로 리소스 로딩 언로딩의 시점에 이벤트를 컨트롤 할 수있습니다.

DOMContentLoaded

1. DOMContentLoaded는 document 객체를 기준으로 발생하기 때문에, addEventListener을 사용해야합니다.

2. script안에 있는 스크립트가 모두 처리된 후에 발생합니다.

2 - 1 2에대한 예외로, async 속성이 있는 스크립트는 DOMContentLoaded의 '모두 처리'의 대상에 포함이 안되기 때문에, async가 실행이 안되더라도 DOMContentLoaded는 발생할 수 있습니다.

 

load

window 객체의 load가 끝난후 실행된다.

1. DOMContentLoaded vs load

//1번케이스
document.addEventListener('DOMContentLoaded', alert('dom'))
window.onload = function() { alert('window'); };

//2번케이스
window.onload = function() { alert('window'); };
document.addEventListener('DOMContentLoaded', alert('dom'))

 1번케이스와 2번케이스 나오는 순서와 상관없이, DOMContentLoaded가 먼저나온다. 이유는 load는 외부자원과 이미지가 모두 끝났을때이지만, DOMContentLoaded는 DDOM의 로드만 끝나면 시작하기 때문이다.

beforeunload

window.onbeforeunload = function() {
  return "저장되지 않은 변경사항이 있습니다. 정말 페이지를 떠나실 건 가요?";
};

위의 예시는, https://ko.javascript.info/onload-ondomcontentloaded가 출저이다.

위의 예시를 사용해서 알 수 있는것은,

1. F5 새로고침을 누르면, return된 값이 YES, OR NO로 선택하게 창으로 뜬다.

2. 하지만, 다른 사이트로 이동하거나 창을 껏을때는 아무런 창이 안나온다

beforeunload 응용 케이스

window.addEventListener('beforeunload', () => {
  localStorage.setItem('name', 'value');
});

버튼을 누를때마다 로컬스토레이지에 저장하는 것보다, 이렇게, 페이지를 떠날때만 저장하는 것이 효율적이다.

unload

사용자가 브라우저 창을 닫거나, 페이지를 언로드(페이지 이동이라던지) 할 때 발생. beforeunload와의 차이라면, 아무래도 이동 전에 막기위한거라면 beforeunload, 이동하고나서라면 unload다의 차이이다.

'Javascript' 카테고리의 다른 글

2차원 Array 만들기.  (0) 2022.05.02
fetch 와 import의 경로  (0) 2022.04.28
Javascript - debounce, throttle  (0) 2022.04.08
Javascript - Event bubbling, Event Capturing  (0) 2022.04.08
Javascript - Promise  (0) 2022.04.07