Share
Sign In

Reconciliation & Render

Reconciliation(재조정)은 React의 렌더링 과정 중 하나로, 가상 DOM 트리를 비교하고 실제 DOM에 반영해야 할 변경 사항을 결정한다. 이 과정에서 React는 두 개의 가상 DOM 트리를 비교하여 변경 사항을 찾는다.
재조정 과정을 요약하면 다음과 같다.
두 요소의 타입을 비교한다. 타입이 다르면, React는 이전 요소를 제거하고 새 요소를 생성한다.
두 요소의 키를 비교한다. 키가 다르면, React는 이전 요소를 제거하고 새 요소를 생성한다.
두 요소의 타입과 키가 같으면, React는 이전 요소의 속성을 기반으로 새 요소의 속성을 업데이트한다.
Reconciliation과 Render 과정을 수행하는 주요 함수들을 간략히 살펴보자

scheduleUpdateOnFiber

Reconciliation의 시작점. 컴포넌트의 state나 props가 변경될 때 호출되며, 작업을 스케줄링하고 우선순위를 결정한다.
scheduleUpdateOnFiber(fiber, expirationTime, suspenseConfig): 작업을 스케줄링하고 우선순위를 결정 작업큐에 fiber 추가 expirationTime과 suspenseConfig를 사용하여 작업 우선순위 결정 작업큐를 정렬하여 가장 높은 우선순위의 작업을 선택 ...

workLoopConcurrent

동시성 작업을 수행하는 작업 루프이다. 이 함수는 작업을 나누어 스케줄링하고, 우선순위에 따라 작업을 수행한다. 또한 브라우저의 렌더링 간격 사이에 남은 시간을 활용하여 성능을 최적화한다.
workLoopConcurrent(): while 작업이 남아있음: 현재 작업을 가져옴 performUnitOfWork(현재 작업)을 호출하여 작업 수행 브라우저가 렌더링할 시간이 남아있는지 확인 시간이 남아있지 않다면 작업 루프를 중단

performUnitOfWork

Reconciliation 과정에서 각 Fiber 노드를 방문하며 작업을 수행하는 함수. 이 함수는 현재 작업 중인 Fiber 노드의 자식 노드들을 생성하고, 그 자식 노드들에 대한 업데이트를 수행한다.
performUnitOfWork(unitOfWork): beginWork()를 호출해 현재 작업 중인 Fiber 노드에 대한 작업 수행 현재 fiber 노드의 컴포넌트를 렌더링 렌더링된 결과를 바탕으로 자식 fiber 노드들을 생성 업데이트를 수행 업데이트가 필요한 자식 노드를 찾아서 업데이트 작업 진행 다음 작업 단위로 이동 ...

beginWork

현재 작업 중인 Fiber 노드의 작업을 시작하는 함수. 이 함수는 노드의 타입에 따라 적절한 작업을 수행하며, 자식 노드들을 생성하고 업데이트한다. 또한, 컴포넌트 라이프사이클 메서드를 호출하는 데 사용된다.
beginWork(현재 작업): 현재 작업 노드의 타입 확인 if 현재 작업 노드가 클래스 컴포넌트라면: 클래스 컴포넌트의 라이프사이클 메서드 호출 클래스 컴포넌트의 render 메서드를 호출하여 자식 노드 생성 elif 현재 작업 노드가 함수 컴포넌트라면: 함수 컴포넌트를 호출하여 자식 노드 생성 elif 현재 작업 노드가 호스트 컴포넌트라면: DOM 업데이트를 위한 변경 사항 처리 ... 작업 수행 후 자식 노드에 대한 작업을 반환

completeUnitOfWork

작업이 완료된 Fiber 노드에 대해 처리를 진행하는 함수. 이 함수는 해당 노드에 대한 side effect를 기록하고, 다음 작업 단위로 이동한다.
completeUnitOfWork(unitOfWork): 작업이 완료된 Fiber 노드에 대한 처리 진행 완료된 fiber 노드의 변경 사항을 기록 해당 노드의 side effect를 기록 다음 작업 단위로 이동 다음 작업 단위가 없을 경우 부모 노드로 이동하며 반복 다음 작업 단위를 반환 ...

commitRoot

Reconciliation이 완료된 후, 변경된 내용을 실제 DOM에 반영하는 함수. 이 과정에서 Render 과정이 수행되며, 업데이트된 내용이 브라우저에 표시된다.
commitRoot(finishedWork): Reconciliation이 완료된 후, 변경된 내용을 실제 DOM에 반영 완료된 fiber 노드에서 변경 사항을 가져옴 변경된 요소를 실제 DOM에 적용 Render 과정을 수행하여 화면을 갱신 변경된 요소들에 대해 브라우저 렌더링 수행 ...