react
Original:🇺🇸 English
Translated
React 성능 최적화 및 베스트 프랙티스 스킬. Vercel Engineering 가이드 기반, 프레임워크 비종속. 다음 상황에서 사용: (1) React 컴포넌트(.tsx, .jsx) 작성 또는 수정 시, (2) 상태 관리, hooks, 리렌더링 최적화 작업 시, (3) 비동기 데이터 페칭 또는 Suspense 패턴 작업 시, (4) 번들 사이즈 최적화 또는 코드 스플리팅 시, (5) 'react', 'useState', 'useEffect', 'useMemo', 'useCallback', 'memo', 'Suspense', 'lazy' 키워드가 포함된 작업 시
14installs
Sourcedalestudy/skills
Added on
NPX Install
npx skill4agent add dalestudy/skills reactTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →React
Vercel 가이드 기반 React 성능 최적화 베스트 프랙티스. 프레임워크 비종속(Next.js, Remix, Vite 등 무관).
각 규칙의 상세 설명과 코드 예제는 references/ 참고. 원본 Vercel 가이드의 전체 규칙(Next.js/SSR 포함)은 vercel-react-best-practices 참고.
규칙 카테고리
| 우선순위 | 카테고리 | 영향도 | 접두사 |
|---|---|---|---|
| 1 | 비동기 워터폴 제거 | CRITICAL | |
| 2 | 번들 사이즈 최적화 | CRITICAL | |
| 3 | 리렌더링 최적화 | MEDIUM | |
| 4 | 렌더링 성능 | MEDIUM | |
| 5 | 클라이언트 데이터/이벤트 | MEDIUM | |
| 6 | JavaScript 성능 | LOW-MEDIUM | |
| 7 | 고급 패턴 | LOW | |
빠른 참조
1. 비동기 워터폴 제거 (CRITICAL)
- -
async-parallel로 독립 작업 병렬화Promise.all() - - 불필요한 경로에서 await 지연
async-defer-await - - Suspense로 부분 렌더링
async-suspense-boundaries - - 부분 의존성 있는 작업의 최대 병렬화
async-dependencies
2. 번들 사이즈 최적화 (CRITICAL)
- - barrel file 직접 import 지양
bundle-barrel-imports - -
bundle-lazy로 코드 스플리팅React.lazy - - hover/focus 시 프리로드
bundle-preload - - 기능 활성화 시에만 모듈 로드
bundle-conditional - - 비필수 서드파티 하이드레이션 후 로드
bundle-defer-third-party
3. 리렌더링 최적화 (MEDIUM)
- - 함수형 setState로 안정적 콜백
rerender-functional-setstate - - 비용 큰 초기값 지연 초기화
rerender-lazy-state-init - - 파생 boolean 구독
rerender-derived-state - - Effect 의존성 좁히기
rerender-dependencies - - memo로 비용 큰 작업 분리
rerender-memo - - startTransition으로 UI 반응성 유지
rerender-transitions - - ref callback으로 DOM 접근 (useRef+useEffect 대체)
rerender-ref-callbacks - - useState 대체 패턴 판단 가이드
rerender-avoid-usestate - - URL 검색 매개변수로 상태 관리
rerender-url-state - - 폼 라이브러리로 useState 제거
rerender-form-libraries - - discriminated union으로 불가능한 상태 방지
rerender-discriminated-union - - useReducer로 복잡한 상태 전이
rerender-use-reducer - - 파생 상태를 렌더링 중 계산
rerender-derived-state-no-effect - - 상태 읽기를 사용 시점으로 지연
rerender-defer-reads - - memo 컴포넌트 기본값 상수 추출
rerender-memo-with-default-value - - 인터랙션 로직을 이벤트 핸들러로 이동
rerender-move-effect-to-event - - 단순 표현식에 useMemo 사용 금지
rerender-simple-expression-in-memo - - 일시적 값에 useRef 사용
rerender-use-ref-transient-values - - useEffect를 커스텀 훅으로 단순화
rerender-simplify-useeffect
4. 렌더링 성능 (MEDIUM)
- - SVG 래퍼로 GPU 가속
rendering-animate-svg-wrapper - - 긴 목록 오프스크린 최적화
rendering-content-visibility - - 정적 JSX 호이스팅
rendering-hoist-jsx - - 삼항 연산자로 falsy 버그 방지
rendering-conditional-render - - 하이드레이션 불일치 없이 깜빡임 방지
rendering-hydration-no-flicker - - Activity/CSS로 상태/DOM 보존
rendering-activity - - SVG 좌표 정밀도 축소 (SVGO)
rendering-svg-precision - - useTransition으로 수동 로딩 상태 대체
rendering-usetransition-loading - - CSS :active + yield로 INP 개선
rendering-inp-css-feedback - - Composition vs Early Return 선택 기준
rendering-composition-vs-early-return
5. 클라이언트 데이터/이벤트 (MEDIUM)
- - passive로 스크롤 지연 제거
client-passive-event-listeners - - localStorage 버전 관리
client-localstorage-schema - - useSyncExternalStore로 브라우저 API/외부 스토어 구독
client-sync-external-store - - 글로벌 이벤트 리스너 중복 제거
client-event-listeners - - TanStack Query/SWR로 데이터 페칭 중복 제거
client-data-dedup - - AbortController로 불필요한 비동기 작업 취소
client-abort-redundant-work
6. JavaScript 성능 (LOW-MEDIUM)
- - Map으로 O(1) 조회
js-index-maps - - toSorted()로 불변성 유지
js-tosorted-immutable - - Set으로 O(1) 멤버십 검사
js-set-map-lookups - - 조기 반환으로 불필요한 처리 방지
js-early-exit - - DOM 읽기/쓰기 분리로 레이아웃 스래싱 방지
js-batch-dom-css - - 반복 함수 호출 모듈 레벨 캐싱
js-cache-function-results - - 루프 내 프로퍼티 접근 캐싱
js-cache-property-access - - localStorage/cookie 읽기 메모리 캐싱
js-cache-storage - - 복수 배열 순회를 단일 루프로
js-combine-iterations - - RegExp를 모듈 스코프로 호이스팅
js-hoist-regexp - - 배열 비교 시 길이 먼저 확인
js-length-check-first - - 정렬 대신 단일 루프로 min/max
js-min-max-loop - - Iterator Helper로 지연 처리
js-iterator-helpers
7. 고급 패턴 (LOW)
- - 이벤트 핸들러를 ref에 저장 (재구독 방지)
advanced-event-handler-refs - - useEffectEvent/useLatest로 안정적 콜백 ref
advanced-use-latest - - 앱 초기화를 컴포넌트가 아닌 모듈 레벨에서
advanced-init-once - - 클로저 스코프 격리로 메모리 누수 방지
advanced-closure-scope
Vercel 원본 가이드 추가 규칙
이 스킬은 프레임워크 비종속 규칙만 포함. Next.js/SSR 전용 규칙은 원본 참고:
| 규칙 | 영향도 | 설명 |
|---|---|---|
| MEDIUM | |
| HIGH | LRU 캐시로 요청 간 캐싱 |
| HIGH | RSC 경계에서 직렬화 최소화 |
| CRITICAL | 컴포넌트 구성으로 서버 데이터 병렬 페칭 |
| MEDIUM | |
| MEDIUM | 서버 액션 인증 검증 |
| LOW | 중복 props 제거 |
| CRITICAL | |
| LOW | suppressHydrationWarning 사용 |
| MEDIUM | API 라우트 비동기 패턴 |
참고
- React 공식 문서
- React Compiler - 사용 시 ,
memo()수동 적용 불필요useMemo() - Vercel: How we made the dashboard twice as fast
- Vercel: How we optimized package imports