화면에 특정 요소를 그려내는 것
Vanila JavaScript를 사용하지 않고 React와 같은 프레임워크를 사용하는 이유 => 렌더링 과정을 잘 처리해 주기 때문에!
DOM 요소를 계산하고 그려내는것
HTML, CSS => DOM, CSSOM => 결합 => 위치 계산 => 그리기
브라우저에서 제공하는 DOM API를 JavaScript를 통해 호출하면서 브라우저에 그려진 화면을 변화시킨다
React의 리렌더링 발생시점, state 사용 이유
state
로!setState
로 state
변경 방법을 제한 setState
에 따라 리렌더링 발생state 변화에서 브라우저에 UI 반영까지 각 컴포넌트는 4단계를 거친다
1,2,3 과정을 최적화하는 방법을 모색해야한다 4번의 과정은 알아서 해준다
- 기존 컴포넌트 UI를 재사용할지 확인
- 함수 컴포넌트 => 컴포넌트 함수 호출
클래스 컴포넌트 =>render
메소드 호출- 2의 결과로 새로운 Virtual DOM 생성
- 이전의 Virtual DOM과 새로운 Virtual DOM 비교 => 실제 변경된 부분만 DOM에 적용
React 는 CRP 수행 횟수를 최적화 하기위해 Virtual DOM
사용한다
브라우저의 CRP(Critical Rendering Path) 과정
CRP 과정 : 브라우저가 HTML, CSS, JavaScript 를 다운로드 받고 처리하여 화면에 픽셀로 그려내는 과정1. HTML을 파싱하여 DOM을 생성 2. CSS를 파싱하여 CSSOM을 생성 3. DOM 과 CSSOM을 결함 => Render Tree 생성 4. Layout : Render Tree와 Viewport(뷰포트)의 width를 통해 요소의 위치와 크기를 계산 5. Paint : Render Tree 상의 요소들을 실제 Pixel로 그리기
Virtual DOM
사용4번은 React의 내부적으로 수행하는 최적화이므로 1,2,3 에 집중해야한다
그중에서도 1,3에 집중!
리렌더링 될 컴포넌트 UI와 이전의 UI가 동일할 경우 => 호출하지 않고 이전 결과값 그대로 사용하기 (React.memo)
Virtual DOM의 변화가 적도록 만들기
<div> => <span> 이렇게 말고
<div> => <div className = "change"> 이런식으로
다음 포스팅은 구체적인 최적화 방안에 대해서 설명해보겠똬...!