feat: Reflow vs Repaint 실험 구현 및 리액트 렌더링 최적화#4
Merged
PaleBlueNote merged 2 commits intomainfrom Jan 12, 2026
Merged
Conversation
da95193 to
ec69c57
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📌 Description
브라우저 렌더링 파이프라인의 **Reflow(Layout)**와 Repaint(Composite) 단계의 성능 비용 차이를 증명하는 첫 번째 실험(Day 1)을 구현하고, 대량의 DOM 제어로 인해 발생한 UI 블로킹 문제를 최적화했습니다.
🛠️ Changes
1. 🧪 실험 기능 구현 (Core Feature)
left/top속성 변경 시 발생하는 Reflow 비용과transform변경 시의 GPU 가속 효율 차이를 시각적으로 구현.stats.js를 통해 실시간 FPS 측정.2. ⚡️ 성능 이슈 해결 (Optimization Report)
대량의 컴포넌트(3,000개) 상태 변경 시 UI가 멈추는 Frame Drop(INP 지연) 현상을 발견하고 해결함.
React.memo도입: 아이템 렌더링 부를 별도 컴포넌트로 분리하고 메모이제이션하여, 불필요한 부모 리렌더링 전파를 차단.useTransition(Concurrency) 적용: 무거운 렌더링 작업을 낮은 우선순위로 미루고, UI(로딩 스피너)를 먼저 갱신하여 Non-blocking UI 경험 제공.📸 Screenshots
🔗 Related Issue
Closes #3