피드로 돌아가기
Dev.toFrontend
원문 읽기
불필요한 Re-rendering 제거 및 SSR 도입으로 렌더링 속도 15배 향상
React-prestanda: Sluta spilla energi på re-rendering
AI 요약
Context
React의 렌더링 모델 오해로 인한 불필요한 컴포넌트 업데이트와 과도한 Bundle Size가 시스템 리소스를 낭비하는 구조. 특히 Global State의 무분별한 사용과 CSR 기반의 렌더링 방식이 모바일 저사양 기기에서 심각한 성능 병목을 유발함.
Technical Solution
- React.memo, useMemo, useCallback 도입을 통한 불필요한 Re-render 사이클 차단 및 계산 비용 최적화
- React.lazy와 Suspense 기반의 Dynamic Route 분할로 초기 로딩 시의 JavaScript Bundle 크기 최소화
- State의 Local-Context-Global 계층 구조 설계 및 Debouncing 적용으로 전역 상태 업데이트 빈도 제어
- SWR 및 React Query를 활용한 Client-side Caching 전략 수립으로 중복 API Request 제거
- CSR에서 SSR/Static Generation으로의 전환을 통한 브라우저의 JS 파싱 및 실행 부하 제거
- useReducer 도입으로 상호 연관된 복잡한 State Transition을 단일 지점에서 관리하여 상태 불일치 방지
Impact
- SSR 도입 시 렌더링 시간 3초에서 200ms로 단축
- WebP 포맷 적용 시 이미지 크기 JPEG 대비 30% 감소
- 최적화된 React 앱의 전반적인 속도 비최적화 버전 대비 평균 40% 향상
Key Takeaway
성능 최적화는 단순한 도구 도입이 아닌 State의 스코프 최소화와 데이터 흐름의 효율적 제어라는 아키텍처적 결정에서 시작됨.
실천 포인트
- Global State 업데이트가 모든 Subscriber의 Re-render를 유발하는지 검토 - Bundle Analyzer를 사용하여 단일 기능 구현을 위해 거대 라이브러리를 임포트하고 있지 않은지 확인 - window event listener 및 timer의 Cleanup 함수 구현 여부 점검 - Lighthouse CI를 통한 JS Bundle 크기 및 LCP(Largest Contentful Paint) 상한선 설정