브라우저의 구조

주소를 입력한다면?
DNS : 아이피주소는 naver.com이야 주소를 갖고 방문을 시도 해
( 이제는 캐시에 저장을 해서 다음 번에는 dns에 묻지 않고 바로 찾을 수 있게 됌)
naver.com 를 들고 서버에 방문한다.
서버에서는 01010001020020300 바이트 스트림 형태로 전달을 한다.
브라우저에서는 받고 다시 인코딩을 한다. (다시 이해할 수 있는 언어로)
바이트 -> 케릭터화 -> 토큰화를 시킨다.

토큰화 : 아 < html을 시작하는 구나 h t m l 이 있네 닫혔네 body가 있네 열렸네





그래서 아래 순서를 보면 localhost => style.css => main.js 순이다.

CSSOM TREE
CSS Object Model을 만들게 된다.

자바스크립트가실행되는 동안 DOM을 파싱은 중단된다.
그래서, 자바스크립트는 바디에서 최 하단에 넣는다? ( 원치 않는 사람은 script 안에 defer를 넣으면 된다)

DOM 은 항상 CSSOM을 기다린다. 완성될때까지 기다림 => 그래서 css파일이 위에있음
※ Reflow 될 떄가 있다. (레이아웃이 자주 변경되는 것이 발생하면 웹사이트에 좋지 않다)

※ 성능을 좋게 하려면?
Reflow
DOM 엘리먼트 추가, 제거 또는 변경
CSS 스타일 추가, 제거 또는 변경
CSS 스타일을 직접 변경하거나, 클래스를 추가함으로써 레이아웃이 변경될 수 있습니다. 엘리먼트의 길이를 변경하면, DOM 트리에 있는 다른 노드에 영향을 줄 수 있습니다.
CSS3 애니메이션과 트랜지션. 애니메이션의 모든 프레임에서 리플로우가 발생합니다.
offsetWidth 와 offsetHeight 의 사용. offsetWidth 와 offsetHeight 속성을 읽으면, 초기 리플로우가 트리거되어 수치가 계산됩니다.
유저 행동. 유저 인터랙션으로 발생하는 hover 효과, 필드에 텍스트 입력, 창 크기 조정, 글꼴 크기 변경, 스타일시트 또는 글꼴 전환등을 활성화하여 리플로우를 트리거할 수 있습니다.
Repaint
가시성이 변경되는 순간 (opacity, background-color, visibility, outline)
Reflow 가 실행된 순간 뒤에 실행됩니다.
사용자가 주소창에 URL 입력을 하게 된다면 → DNS를 통해 IP주소를 반환하고 TCP/IP 프로토콜을 사용하여 서버에 요청합니다. → 서버에서는 바이트 스트림 형태로 전달을 해주며 브라우저에서는 다시 인코딩을 하여 바이트 → 케릭터화 → 토큰화를 합니다.→ 객체화를 시켜 DOM TREE를 구성하게 되며, CSSOM TREE이 합쳐져 Render Tree가 만들어집니다. → Layout → Paint → composite를 하게 됩니다.