사용자 인터페이스: 주소 표시줄, 이전/다음 버튼, 북마크 메뉴 등 요청한 페이지를 보여주는 창을 제외한 사용자가 조작가능한 나머지 모든 부분
브라우저 엔진: 사용자 인터페이스와 렌더링 엔진 사이를 연결해준다.
자료저장소: 쿠키 등을 하드디스크에 저장한다. HTML5 부터는 Web database에 저장 가능하다.
렌더링 엔진: 브라우저 엔진으로부터 URI 형태로 컨텐츠 요청을 받는다. 통신으로 데이터를 요청한다. 받은 데이터를 파싱한 후 렌더링 한다. 크롬은 Webkit을 사용하다가 2013년 이후로 Blink로 대체했다고 한다.
통신: 렌더링 엔진으로부터 HTTP등의 요청을 받고, 처리 후 응답한다.
자바스크립트 해석기: 자바스크립트를 파싱하고 실행한다. 크롬에서는 V8엔진이 여기에 속한다.
UI 백엔드: render tree를 브라우저에 그린다.
오늘날 대부분의 기기는 초당 60fps의 빈도로 화면을 새로고침 한다는데, 계산하면 1프레임 당 약 16.66ms의 시간이 할당 되는 것이다. 한 프레임이 화면에 표시되기 까지의 픽셀 파이프라인은 다음과 같다.
파이프라인에서 앞 프로세스는 뒤 프로세스를 호출하므로 Reflow, Repaint 과정을 최소화 하는 것이 렌더링 최적화 방법 중 하나라고 할 수 있다.
다음 링크를 참고하면 어떤 속성이 Reflow를 일으키는지, Composite만 일으키는 지 확인 할 수 있다.
https://csstriggers.com/
position, width, height, left, top, right, bottom, margin, padding, border, border-width,
clear, display, float, font-family, font-size, font-weight, line-height, min-height,
overflow, text-align, vertical-align, white-space
background, background-image, background-position, background-repeat, background-size,
border-radius, border-style, box-shadow, color, line-style, outline, outline-color,
outline-style, outline-width, text-decoration, visibilty
https://developers.google.com/web/fundamentals/performance/rendering
https://d2.naver.com/helloworld/59361
https://chanyeong.com/blog/post/43
https://davidhwang.netlify.app/Developments/browser-rendering-process/