표준 명세서가 없음에도 불구하고 수년간 서로의 장점을 모방하면서 현재에 이르게 된 것
사용자 인터페이스
: 주소 표시줄, 이전/다음 버튼, 북마크 메뉴 등 요청한 페이지를 보여주는 창을 제외한 모든 부분브라우저 엔진
: 사용자 인터페이스와 렌더링 엔진 사이의 동작 제어렌더링 엔진
: 요청한 콘텐츠 표시. 예를들어 HTML을 요청하면 HTML과 CSS를 파싱하여 화면에 표시통신
: HTTP 요청과 같은 네트워크 호출에 사용됨. 이것은 플랫폼 독립적인 인터페이스이고 각 플랫폼 하부에서 실행됨UI 백엔드
: 콤보 박스와 창 같은 기본적인 장치를 그림. 플랫폼에서 명시하지 않은 일반적인 인터페이스로서, OS 사용자 인터페이스 체계를 사용자바스크립트 해석기
: 자바스크립트 코드를 해석하고 실행자료 저장소
: 이 부분은 자료를 저장하는 계층. 쿠키를 저장하는 것과 같이 모든 종류의 자원을 하드 디스크에 저장할 필요가 있다. HTML5 명세에는 브라우저가 지원하는 '웹 데이터 베이스'가 저장되어 있다.크롬은 대부분의 브라우저와 달리 각 탭마다 별도의 렌더링 엔진 인스턴스를 유지하는 것이 주목할만하다. 각 탭은 독립된 프로세스로 처리된다.
Trident
, FireFox는 Gecko
, 사파리는 Webkit
, 구글 크롬과 오페라 브라우저는 Webkit의 일종인 Blink
를 사용. Webkit은 오픈소스 렌더링 엔진으로 원래 리눅스 플랫폼에 사용되었다.렌더링 엔진은 웹 서버로부터 전달받은 HTML 문서를 맨 처음 네트워크 레이어에서 불러온다. 그리고 아래와 같은 기본적인 flow를 거친다.
렌더링 엔진은 우선 네트워크 레이어를 통해 전달받은 HTML 문서(source code)를 파싱하여 각 요소들을 DOM tree(contents tree)의 각 DOM 노드들로 전환한다.
DOM이란 Document Object Model의 준말로 마크업 형태의 HTML 문서를 오브젝트 모델의 형태로 바꿔놓은 것. 당연히 HTML 문서의 각 마크업과 DOM의 각 요소는 1:1 매칭
HTML, body 부모 태그 안에 단락을 나타내는 p 태그, 한 요소를 나타내는 div 태그가 자식 태그로 존재함. 이 코드를 Dom tree로 전환하면
HTML 문서들을 파싱하여 Dom tree를 구성한 후, 렌더링 엔진은 CSS/Style 데이터를 파싱하고 그 스타일 데이터들로 Render tree를 만든다. Dom tree가 웹 상에 나타날 내용(contents)을 구성한다면 Render tree는 시각적 요소, 어떻게 나타날지 그 스타일을 지정
Render tree는 색상, 차원 등 시각적 지침들을 담은 정사각형들로 구성. 그 정사각형들은 스크린에 맞는 순서대로 정렬되어야 함
Render tree 각각의 정사각형에 해당하는 Renderer들은 Dom tree 요소들에 적용되지만 1:1 관계가 성립되는 것은 아니다.
시각적이지 않은 DOM 요소들은 Render tree에 삽입될 수 없다. 태그 안의 요소들은 화면에 나타나는 값들을 포함하지 않는다. 따라서 그 어떤 Renderer도 적용될 수 없다.