오늘은 면접 질문에도 자주 나오는 브라우저 렌더링 과정에 대해서 공부해보도록 하겠습니다.
먼저 브라우저의 기본 구조
에 대해서 알아보겠습니다.
사용자 인터페이스
: 주소표시줄 , 이전/다음 버튼 , 홈버튼, 새로고침/정지 버튼 등 요청한 페이지를 보여주는 창 외에 사용자가 컨트롤 할 수 있는 부분을 말합니다.브라우저 엔진
: 사용자 인터페이스와 렌더링 엔진 사이에 동작을 제어하고 주소 표시줄에 적은 URI를 렌더링 엔진에게 전달합니다. ( 새로고침 , 뒤로가기 , 홈버튼을 눌렀을때 그것의 명령을 렌더링 엔진에게 전달 )렌더링 엔진
: 요청한 URI를 브라우저 엔진에게 받아서 server에게 요청한다 (통신). server로 부터 URI에 해당하는 데이터 (HTML ,CSS ,JS)를 받아서 파싱한 후 렌더링합니다.통신
: 렌더링 엔진으로부터 HTTP 요청등을 받아서 네트워크 처리 후 응답을 전달합니다. 자바스크립트 해석기
: JavaScript를 파싱합니다. ( chrome은 V8 )자료 저장소
: 쿠키 , storage등을 저장합니다. UI 백엔드
: render tree를 browser에 그리는 역할을 합니다.다음은 브라우저의 렌더링 과정
을 살펴보겠습니다.
다음은 렌더링 엔진
에 대해서 자세하게 알아보겠습니다.
Reflow : 자바스크립트로 DOM을 변경하거나 CSS에서 위치 값에 영향을 주는 속성들을 변경하는 등 레이아웃에 영향을 미치게 되면 레이아웃 -> 페인트 -> 합성 과정이 재실행되는 리플로우가 발생합니다.
Repaint : 레이아웃에 영향을 미치지 않는 속성들을 변경할 때에는 페인트 -> 합성 과정이 재실행되는 리페인트가 발생합니다.
아래에 성능 최적화를 통해서 자세히 알아보겠습니다 😃
마지막으로 성능 최적화
방법에 대해서 알아보겠습니다. 최근에 light house를 이용해서 성능최적화를 시도해본적이 있는데 CSS만으로도 최적화를 진행할 수 있다는 것을 브라우저 렌더링을 공부하면서 알게되어 참고 자료와 함께 간략하게 소개해드리겠습니다.
⚒️ UI가 업데이트되는 3가지 상황 ( CSS 변경 , JS로 인해 동적으로 변경 )
Layout이 발생하는 경우
주로 요소의 크기나 위치가 바뀔 때, 브라우저 창의 크기가 바뀌었을 때 다시 발생합니다.
Paint부터 발생하는 경우
주로 배경 이미지나 텍스트 색상 , 그림자등 레이아웃의 수치를 변화시키지 않는 스타일의 변경이 일어났을때 발생합니다.
Layout과 Paint를 진행하지 않고 합성만 발생하기 때문에 성능상 가장 큰 이점을 가집니다.
위와 같이 CSS의 속성이 위와 같이 1,2,3번중에 어떤곳에 속하는지 알고 싶으시다면 CSS Triggers를 참고해주세요
끝까지 읽어주셔서 감사합니다. 😃
브라우저 렌더링 과정
우아한 Tech
참고
DOM MDN
CSS Triggers
web-dev 참고 자료
참고2