DOMContentLoaded와 load 이벤트의 차이점


답변:


191

로부터 모질라 개발자 센터 :

DOMContentLoaded 이벤트는 스타일 시트, 이미지 및 서브 프레임이로드를 완료 할 때까지 기다리지 않고 문서가 완전히로드되고 구문 분석 될 때 시작됩니다 (로드 이벤트는 완전히로드 된 페이지를 감지하는 데 사용될 수 있음).


27
참고로, 동일한 MDN 링크 [지금]도 말합니다 : "참고 : 스타일 시트는 블록 스크립트 실행을로드하므로 <link rel ="stylesheet "...> 다음에 <script>가 있으면 페이지 구문 분석이 완료되지 않습니다. 스타일 시트가로드 될 때까지 DOMContentLoaded가 실행되지 않습니다. "
Nick

10
@Nick이 페이지는 그 이유를 제시합니다. html5rocks.com/en/tutorials/internals/howbrowserswork 페이지의 비디오를 보는 것이 좋습니다.
abhisekp

1
비디오 링크는 이제 더 이상 사용되지 않지만 @abhisekp nice tutorial
supi

따라서 렌더링 트리는 DOMContentLoaded가 시작된 후에 빌드됩니다. 그러나 DOMContentLoaded는 이미지 / 서브 리소스 / 서브 프레임이로드를 완료 할 때까지 기다리지 않습니다. developer.mozilla.org/en-US/docs/Web/API/Window/… . 이 이미지 / 서브 프레임 / 서브 리소스가 생성 된 후에 렌더 트리에 의해 호출되는지 또는 렌더 트리가 여전히 구축되는 동안 DOM 트리에 의해 이미 호출되었는지 알고 있습니까? 다시 말해서, 렌더 트리는 이러한 이미지 / 서브 프레임 / 서브 리소스를 다운로드하기 위해 많은 연결을 트리거합니까, 아니면 다운로드가 이미 진행 중입니까?
weefwefwqg3

83

DOMContentLoaded이벤트는 즉시 DOM 계층이 완전히 구축 된 바와 같이, 발광하는 load모든 이미지와 서브 프레임이 완성 로딩이있을 때 이벤트가 그것을 할 것입니다.

DOMContentLoaded 대부분의 최신 브라우저에서 작동합니다. 하지만 IE9 이상을 포함한 IE 하지 않습니다 . jQuery 라이브러리에서 사용되는 것과 같이 이전 버전의 IE에서는이 이벤트를 모방 하는 몇 가지 해결 방법 이 있으며 IE 관련 onreadystatechange 이벤트를 첨부합니다 .


7
"이 이벤트"라고 말할 때 어떤 이벤트를 언급하고 있습니까?
Tom Hubbard

2
"이 이벤트"= DOMContentLoaded. IE8에서는 작동하지 않습니다. 이를 지원하려면 CMS가 링크하는 해결 방법을 사용하십시오
Jan Derk

53

차이점을 직접 확인하십시오.

데모

에서 마이크로 소프트 IE

현재 페이지의 구문 분석이 완료되면 DOMContentLoaded 이벤트가 발생합니다. 광고 및 이미지를 포함한 모든 리소스에서 모든 파일의로드가 완료되면 load 이벤트가 발생합니다. DOMContentLoaded는 UI 기능을 복잡한 웹 페이지에 연결하는 데 사용할 수있는 훌륭한 이벤트입니다.

에서 모질라 개발자 네트워크

DOMContentLoaded 이벤트는 스타일 시트, 이미지 및 서브 프레임이로드를 완료 할 때까지 기다리지 않고 문서가 완전히로드되고 구문 분석 될 때 시작됩니다 (로드 이벤트는 완전히로드 된 페이지를 감지하는 데 사용될 수 있음).


DOMContentLoaded모든 스크립트 (지연 / 비동기 포함)가로드되었음을 보장 합니까 ? 스크립트에 대해서는 여기에 아무 것도 언급되어 있지 않습니다 : developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
Sergey

@Sergey Nope. 비동기 리소스 (예 : <script async src = app.js />)는 나머지 페이지와 독립적으로로드되므로 서버에서 리소스를 가져 오기 전에 DOMContentLoaded가 트리거 될 수 있습니다.
Mehrad Sadegh

1
@MehradSadegh 당신이 틀렸다고 생각합니다! 에서 MDN 문서 : 연기 속성이 스크립트는 스크립트가로드 평가를 완료 할 때까지 발사에서 DOMContentLoaded 이벤트를 방지 할 수 있습니다. 이 SO 질문을 살펴보면이를 확인할 수 있습니다. stackoverflow.com/questions/42950574/…
radzak

1
@Jatimir 지연 및 비동기 속성은 다른 동작을한다고 생각합니다.
Mehrad Sadegh

1
@Jatimir 기꺼이 당신이 기여한 것이기 때문에 당신이 게시 한 것을 기쁘게 생각합니다. 감사합니다!
Robert Wildling

29

DOMContentLoaded==window.onDomReady()

Load==window.onLoad()

문서가 "준비"될 때까지 페이지를 안전하게 조작 할 수 없습니다. jQuery는 이러한 준비 상태를 감지합니다. $ (document) .ready () 안에 포함 된 코드는 DOM (Document Object Model) 페이지가 JavaScript 코드를 실행할 준비가 된 후에 만 ​​실행됩니다. $ (window) .load (function () {...}) 안에 포함 된 코드는 DOM뿐만 아니라 전체 페이지 (이미지 또는 iframe)가 준비되면 실행됩니다.

참조 : http://learn.jquery.com/using-jquery-core/document-ready/


1
문제는 jQuery에 관한 것이 아닙니다.
user34660

4
@ user34660 그렇지는 않지만 이해하는 데 도움이됩니다.
Anderson

16
  • domContentLoaded : DOM이 모두 준비되었고 JavaScript 실행을 차단하는 스타일 시트가없는 시점을 표시합니다. 즉, 이제 (잠재적으로) 렌더 트리를 구성 할 수 있습니다. 많은 JavaScript 프레임 워크는 자체 로직 실행을 시작하기 전에이 이벤트를 기다립니다. 이러한 이유로 브라우저는 EventStart 및 EventEnd 타임 스탬프를 캡처하여이 실행 시간을 추적 할 수 있습니다.

  • loadEvent : 모든 페이지로드의 마지막 단계에서 브라우저는 "onload"이벤트를 발생시켜 추가 응용 프로그램 논리를 트리거 할 수 있습니다.

출처


url이 JS 인 스크립트 태그가있는 경우 domContentLoaded 이전 또는 이후에로드됩니까?
Pavan

0

우리에게 맞는 코드가 있습니다. 우리는 MSIE에 치명적이며 누락 된 DomContentLoaded것으로 나타 났으며 추가 리소스가 캐시되지 않으면 (콘솔 로깅을 기준으로 최대 300ms) 지연되고 캐시 될 때 너무 빨리 트리거됩니다. 그래서 우리는 MISE의 대체품에 의지했습니다. 또한 외부 JS 파일 전후에 트리거 doStuff()되는지 여부에 따라 함수 를 트리거하려고 DomContentLoaded합니다.

// detect MSIE 9,10,11, but not Edge
ua=navigator.userAgent.toLowerCase();isIE=/msie/.test(ua);

function doStuff(){
    //
}
if(isIE){
    // play it safe, very few users, exec ur JS when all resources are loaded
    window.onload=function(){doStuff();}
} else {
    // add event listener to trigger your function when DOMContentLoaded
    if(document.readyState==='loading'){
        document.addEventListener('DOMContentLoaded',doStuff);
    } else {
        // DOMContentLoaded already loaded, so better trigger your function
        doStuff();
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.