브라우저
웹에서 페이지를 찾아서 보여주고, 사용자가 하이퍼링크를 통해 다른 페이지로 이동할 수 있도록 하는 프로그램으로
브라우저는 유저가 선택한 자원을 서버로 부터 받아와서 유저에게 보여준다. 이 자원은 페이지 외에도 이미지, 비디오 등의 컨텐츠들도 포함된다. 받아온 자원들을 렌더링 과정을 통해 유저에게 보여주게 된다.
브라우저의 종류는 chrome, safari, firefox 등이 있다
Dom
Document Object Model의 약자로 문서 객체 모델을 의미한다.
문서 객체란 html, head, body와 같은 태그들을 javascript가 이용할 수 있는 (메모리에 보관할 수 있는) 객체를 의미한다.

브라우저 렌더링 과정
- HTML 파일과 CSS 파일을 파싱해서 각각 Tree를 만든다. (DOM, CSSOM 을 생성) (Parsing)
- 두 Tree를 결합하여 Rendering Tree를 만든다. (Style)
- Rendering Tree에서 각 노드의 위치와 크기를 계산한다. (Layout)
- 계산된 값을 이용해 각 노드를 화면상의 실제 픽셀로 변환하고, 레이어를 만든다. (Paint)
- 레이어를 합성하여 실제 화면에 나타낸다. (Composite)

리플로우와 리페인트중 어느것이 더 부하가 클까?
- 리플로우 (reflow)
- DOM 요소의 기하학적 속성이 변경될때, 브라우저 사이즈가 변할때, 스타일시트가 로딩되었을때 발생하는 변화들을 다시 계산 해주는 작업을 뜻하고 레이아웃(Layout) 이라고도 한다.
- 리페인트 (repaint)
- 변경된 요소를 실제로 화면에 그려주는 작업을 리페인트라고 한다. 그래서 리플로우가 발생하면 필연적으로 리페인트가 실행된다.
리페인트도 굉장히 무거운 작업이긴 하지만 리플로우 처럼 모든 요소들에 대한 기하학적 정보들을 계산해주는 작업은 아니기 때문에 리플로우 보다는 상대적으로 훨씬 가벼운 작업이다
Dom을 직접조작하는것은 느릴까?
과거 IE와 같은 브라우저에서는 DOM은 일반적으로 객체 대신 노드(Node)를 사용하여 계층 구조를 형성하고 이를 탐색하며 메모리를 관리하는 방식을 사용해 자바스크립트와 DOM 간의 데이터 교환과 상호작용이 비효율적이었다
하지만 모던 브라우저(Chrome, Safari)는 DOM도 자바스크립트와 완전히 동일한 메모리 모델을 쓰기 때문에 자바스크립트의 객체를 다루는 것과 속도 차이는 거의 없다
'Frontend' 카테고리의 다른 글
| [React] vite를 이용한 react library 만들기 (4) | 2024.12.30 |
|---|---|
| [React] UnControlled Component (3) | 2024.12.24 |
| [React] ReactFiber와 렌더링 과정 (6) | 2024.12.24 |
| [Micro Frontend] Module Federation을 이용한 Runtime integration (2) | 2024.01.29 |
| [React] Polymorphic component (5) | 2024.01.28 |