브라우저란?
웹 브라우저는 동기(Synchronous)적으로 (HTML + CSS), Javascript 언어를 해석하여 내용을 화면에 보여주는 응용 소프트웨어이다.
브라우저의 구조
브라우저의 구조를 검색하면 해당 이미지를 가장 많이 확인할 수 있다.
각각에 대한 간단한 설명을 함께 적어보았다.
사용자가 접근할 수 있는 영역입니다. URL를 입력할 수 있는 주소 표시줄, 이전/다음 버튼, 북마크 메뉴, 새로 고침 버튼과 현재 문서의 로드를 중단할 수 있는 정지 버튼 , 홈 버튼 등 요청한 페이지를 보여주는 창을 제외한 나머지 모든 부분입니다.
사용자 인터페이스와 렌더링 엔진 사이의 동작을 제어합니다. Data Storage를 참조하며 로컬에 데이터를 쓰고 읽으면서 다양한 작업을 합니다.
웹 서버로부터 응답 받은 자원을 웹 브라우저 상에 나타냅니다. 예를 들어 HTML 문서를 응답받으면 HTML과 CSS를 파싱 하여 화면에 표시합니다. 브라우저의 동작 원리를 이해하려면 렌더링 엔진의 이해가 중요합니다.
브라우저는 서버로부터 HTML 문서를 응답받으면 렌더링 엔진의 HTML 파서와 CSS 파서에 의해 파싱(parsing)되어 DOM, CSSOM 트리로 변환되고 렌더 트리로 결합합니다. 이렇게 생성된 렌더 트리를 기반으로 브라우저는 웹 페이지를 나타냅니다.
HTTP 요청과 같은, 서버와 통신이 가능하게 하는 네트워크 호출에 사용됩니다.
select, input 등 기본적인 위젯을 그리는 인터페이스 입니다.
자바스크립트 코드를 해석하고 실행합니다.
Cookie, Local Storage, Indexed DB 등 브라우저 메모리를 활용하여 저장하는 영역입니다.
렌더링 엔진
우리가 naver.com 을 검색했을 때 컴퓨터가 이해하는 주소는 IP주소
이고 naver.com 도메인은 사용자가 보기 편하도록 부여한 이름이다.
(IP주소 예시 223.62.162.17)
노드에 관계를 부여해주면 돔트리가 형성된다.
문서를 해석해서 DOM Tree를 만드는 것!
HTML을 읽어내리다가
<link rel="style sheet" href="style.css">
link 태그를 만나면 다시 IP주소에 찾아가서 css파일을 요청한다.
주소를 받아온 후 다시 같은과정 반복
HTML 파일을 보면 <script src="main.js"></script>
가 항상 아래에 있는것을 볼 수 있다.
이유가 무엇일까?
javascript는 힘이 있어서 html을 쓰지 않고 javascript 파일 만으로도 노드를 만들 수 있기 때문에... 파싱을 멈추고 js의 요청사항을 모아서 한번에 처리하기 위해
script 태그에 defer
를 써주면됨
DOM은 CSSOM을 만나야 다음스텝으로 나아갈 수 있기 때문에 빠르게 만나기 위해 상단에 둔다
→ 부분적으로 바뀔 경우에 효율성을 높이기 위해!
Layout → Paint → Composite
단계는 우리가 웹사이트를 사용할 때 반복되는 구간이다.
브라우저 렌더링 요약
먼저 HTML을 파싱하여 DOM 노드로 변환하고 CSS 파일과 포함된 스타일 요소들을 파싱하여 CSS 객체 모델이 생성되고 정해진 순서대로 렌더 트리를 형성한다. 그 후에는 이 렌더 트리를 기반으로 브라우저는 화면에 각 요소들을 배치하고 렌더링 한다.