면접 단골 주제인 브라우저 렌더링 방식에 대해 알아보자!
우선 렌더링이란 HTML,CSS,Javascript등 개발자가 작성한 문서를 브라우저에서 그래픽 형태로 출력하는 과정을 말한다.
대부분의 브라우저는 렌더링을 수행하는 렌더링 엔진
을 가지고 있다. 여기서 알아야할 것은 모든 브라우저가 같은 렌더링 엔진을 사용하지는 않는다.
각 렌더링 엔진들은 웹 표준에 따라 개발자들이 작성한 문서를 브라우저에 보여주지만, 개별 진척도나 별도 규칙에 따라 지원하는 표준이 다르거나 렌더링 알고리즘 방식에 차이가 있을 수 있다.
렌더링 과정을 살펴보자.
가장 처음으로 서버로부터 받은 HTML,css를 다운로드 받는다.HTML CSS 파일은 각각 DOM Tree(무엇을 그릴지 결정)와 CSSOM tree(어떻게 그릴지 결정)으로 만들어진다.
DOM Tree와 CSSOM 을 이용해 Render Tree를 생성한다.
화면에 그려질 것만 결정을 한다.
요소 구조와 텍스트만 존재하는 DOM tree와 달리 Render Tree에는 스타일 정보가 설정되어 있으며 실제 화면에 표현되는 노드들로만 구성된다.
추가로, display:none
속성이 설정된 노드는 화면에 공간을 차지하지 않기에 Render tree만드는 과정에서 제외된다. Visibility:invisible
의 경우는 공간은 차지하고 요소가 보이지 않게만 하기에 Render tree에 포함된다.
Layout단계는 브라우저의 뷰포트 내에서 각 노드들의 정확한 위치와 크기를 계산한다. 다시 얘기해보면, 생성된 Render Tree 노드들이 가지고 있는 스타일과 속성에 따라서 브라우저 화면의 어느 위치에 어느 크기로 출력될지 계산하는 단계
Layout 계산이 완료되면 이제 요소들은 실제 화면을 그린다.Render Tree이용해 실제 픽셀 값을 채워넣는다. 이 때 텍스트, 색,이미지, 그림자 효과등이 모두 처리되어 그려진다.
참고:https://boxfoxs.tistory.com/408
https://beomy.github.io/tech/browser/browser-rendering/