브라우저 동작 원리

wisdom·2022년 6월 6일
0

브라우저의 기능

  • 브라우저의 핵심 기능은 사용자가 참조하고자 하는 웹페이지를 서버에 요청(Request)하고 서버의 응답(Response)을 받아 브라우저에 표시하는 것이다. 브라우저는 서버로부터 HTML, CSS, Javascript, 이미지 파일 등을 응답받는다.
  • HTML, CSS 파일은 렌더링 엔진의 HTML 파서와 CSS 파서에 의해 파싱(Parsing)되어 DOM, CSSOM 트리로 변환되고 렌더 트리로 결합된다. 이렇게 생성된 렌더 트리를 기반으로 브라우저는 웹페이지를 표시한다.

브라우저의 기본 구조

  • 사용자 인터페이스
    • 주소 표시줄, 이전/다음 버튼, 북마크 메뉴 등. 요청한 페이지를 보여주는 창을 제외한 나머지 모든 부분이다.
  • 브라우저 엔진
    • 사용자 인터페이스와 렌더링 엔진 사이의 동작을 제어.
  • 렌더링 엔진
    • 요청한 콘텐츠를 표시. 예를 들어 HTML을 요청하면 HTML과 CSS를 파싱하여 화면에 표시함 .
  • 통신
    • HTTP 요청과 같은 네트워크 호출에 사용됨. 이것은 플랫폼 독립적인 인터페이스이고 각 플랫폼 하부에서 실행됨.
  • UI 백엔드
    • 콤보 박스와 창 같은 기본적인 장치를 그림. 플랫폼에서 명시하지 않은 일반적인 인터페이스로서, OS 사용자 인터페이스 체계를 사용.
  • 자바스크립트 해석기
    • 자바스크립트 코드를 해석하고 실행.
  • 자료 저장소
    • 이 부분은 자료를 저장하는 계층이다. 쿠키를 저장하는 것과 같이 모든 종류의 자원을 하드 디스크에 저장할 필요가 있다. HTML5 명세에는 브라우저가 지원하는 '웹 데이터 베이스'가 정의되어 있다.

자바스크립트 엔진

  • 자바스크립트는 렌더링 엔진이 아닌 자바스크립트 엔진이 처리한다. HTML 파서는 script 태그를 만나면 자바스크립트 코드를 실행하기 위해 DOM 생성 프로세스를 중지하고 자바스크립트 엔진으로 제어 권한을 넘긴다. 제어 권한을 넘겨 받은 자바스크립트 엔진은 script 태그 내의 자바스크립트 코드 또는 script 태그의 src 어트리뷰트에 정의된 자바스크립트 파일을 로드하고 파싱하여 실행한다. 자바스크립트의 실행이 완료되면 다시 HTML 파서로 제어 권한을 넘겨서 브라우저가 중지했던 시점부터 DOM 생성을 재개한다.

  • 이처럼 브라우저는 동기(Synchronous)적으로 HTML, CSS, Javascript을 처리한다. 이것은 script 태그의 위치에 따라 블로킹이 발생하여 DOM의 생성이 지연될 수 있다는 것을 의미한다. 따라서 script 태그의 위치는 중요한 의미를 갖는다.

  • body 요소의 가장 아래에 자바스크립트를 위치시키는 것은 좋은 아이디어이다. 그 이유는 아래와 같다.

    • HTML 요소들이 스크립트 로딩 지연으로 인해 렌더링에 지장 받는 일이 발생하지 않아 페이지 로딩 시간이 단축된다.
    • DOM이 완성되지 않은 상태에서 자바스크립트가 DOM을 조작한다면 에러가 발생한다.

렌더링 엔진

  • 웹브라우저마다 다른 렌더링 엔진
    • Safari: Webkit
    • Firefox: Gecko
    • Chrome: Blink

렌더링 엔진의 목표

  • HTML, CSS, JS, 이미지 등 웹페이지에 포함된 모든 요소들을 화면에 보여준다.
  • 업데이트가 필요할 때, 효율적으로 렌더링을 할 수 있도록 자료구조를 생성한다.

렌더링 엔진의 동작 과정


렌저링 엔진은 서버로부터 응답바은 HTML문서를 얻는 것으로 시작한다.
1. 렌더링 엔진은 HTML문서를 파싱하여 DOM 트리를 구축한다. (DOM 생성)
2. 외부 CSS파일과, HTML에 포함된 스타일 요소를 파싱한다. (CSSOM 생성)
3. DOM 트리와 2번의 결과물을 합쳐 렌더 트리를 구축한다. (렌더 트리 생성)
4. 렌더 트리 각 노드에 대해 화면 상에서 배치할 곳을 결정한다. (레이아웃 - 리플로우) (뷰포트 내 상대적 위치, 사이즈)
5. 렌더 트리의 각 노드를 그린다 (화면에 표시하는게 아닌 이미지를 준비한다.). (페인팅) (px값으로 화면에 나타낸다.)
6. 준비된 레이어를 브라우저 위에 순서대로 표시한다. (컴포지션)(z-index 순으로)

profile
문제를 정의하고, 문제를 해결하는

0개의 댓글