October 27, 2021
브라우저는 서버로부터 HTML을 응답받으면 다음과 같은 과정을 거쳐 렌더링을 수행한다.
사실 HTML, CSS, JS 파싱은 꼭 위에 적은 순서대로 일어나지는 않는다. 렌더링 엔진과 자바스크립트 엔진은 병렬적으로 파싱을 실행하지 않고 직렬적으로 수행하기 때문이다.
출처: [책] 모던 자바스크립트 Deep Dive
위 그림처럼 브라우저는 동기적으로, 즉 위에서 아래 방향으로 순차적으로 HTML, CSS, JS를 파싱하고 실행한다. 이것은 script 태그 위치에 따라 HTML 파싱이 블로킹되어 DOM 생성이 지연될 수 있다는 것을 의미한다. 따라서 script 태그의 위치는 중요한 의미를 갖는다.
script 태그의 위치와 관련해서는 따로 글을 작성해 두었다. 스크립트 로드 시점
위와 같은 이유로 JS 파일 안에서 DOM이나 CSSOM을 변경하는 DOM API를 사용할 때 DOM이나 CSSOM의 생성이 완료되지 않은 상태라면 문제가 발생할 수 있다.
레이아웃 계산과 페인팅 역시 반드시 순차적으로 실행되는 것은 아니다. 레이아웃의 변화가 없다면 페인팅만 실행된다.