react
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseReact
React
Vercel 가이드 기반 React 성능 최적화 베스트 프랙티스. 프레임워크 비종속(Next.js, Remix, Vite 등 무관).
각 규칙의 상세 설명과 코드 예제는 references/ 참고. 원본 Vercel 가이드의 전체 규칙(Next.js/SSR 포함)은 vercel-react-best-practices 참고.
基于Vercel指南的React性能优化最佳实践。与框架无关(支持Next.js、Remix、Vite等各类框架)。
各规则的详细说明及代码示例请参考references/。包含Next.js/SSR相关的完整Vercel指南规则,请查看vercel-react-best-practices。
규칙 카테고리
规则分类
| 우선순위 | 카테고리 | 영향도 | 접두사 |
|---|---|---|---|
| 1 | 비동기 워터폴 제거 | CRITICAL | |
| 2 | 번들 사이즈 최적화 | CRITICAL | |
| 3 | 리렌더링 최적화 | MEDIUM | |
| 4 | 렌더링 성능 | MEDIUM | |
| 5 | 클라이언트 데이터/이벤트 | MEDIUM | |
| 6 | JavaScript 성능 | LOW-MEDIUM | |
| 7 | 고급 패턴 | LOW | |
| 优先级 | 分类 | 影响程度 | 前缀 |
|---|---|---|---|
| 1 | 消除异步瀑布流 | 关键 | |
| 2 | 包体积优化 | 关键 | |
| 3 | 重渲染优化 | 中等 | |
| 4 | 渲染性能 | 中等 | |
| 5 | 客户端数据/事件 | 中等 | |
| 6 | JavaScript性能 | 低-中等 | |
| 7 | 高级模式 | 低 | |
빠른 참조
快速参考
1. 비동기 워터폴 제거 (CRITICAL)
1. 消除异步瀑布流(关键)
- -
async-parallel로 독립 작업 병렬화Promise.all() - - 불필요한 경로에서 await 지연
async-defer-await - - Suspense로 부분 렌더링
async-suspense-boundaries - - 부분 의존성 있는 작업의 최대 병렬화
async-dependencies
- - 使用
async-parallel并行处理独立任务Promise.all() - - 在非必要路径中延迟await
async-defer-await - - 使用Suspense实现部分渲染
async-suspense-boundaries - - 最大化存在部分依赖的任务的并行度
async-dependencies
2. 번들 사이즈 최적화 (CRITICAL)
2. 包体积优化(关键)
- - barrel file 직접 import 지양
bundle-barrel-imports - -
bundle-lazy로 코드 스플리팅React.lazy - - hover/focus 시 프리로드
bundle-preload - - 기능 활성화 시에만 모듈 로드
bundle-conditional - - 비필수 서드파티 하이드레이션 후 로드
bundle-defer-third-party
- - 避免直接导入barrel文件
bundle-barrel-imports - - 使用
bundle-lazy实现代码分割React.lazy - - 在hover/focus时进行预加载
bundle-preload - - 仅在功能激活时加载模块
bundle-conditional - - 延迟加载非必要第三方依赖至 hydration 完成后
bundle-defer-third-party
3. 리렌더링 최적화 (MEDIUM)
3. 重渲染优化(中等)
- - 함수형 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
- - 使用函数式setState实现稳定回调
rerender-functional-setstate - - 延迟初始化成本较高的初始值
rerender-lazy-state-init - - 订阅派生布尔值
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简化为自定义hooks
rerender-simplify-useeffect
4. 렌더링 성능 (MEDIUM)
4. 渲染性能(中等)
- - 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
- - 使用SVG容器实现GPU加速
rendering-animate-svg-wrapper - - 长列表离屏内容优化
rendering-content-visibility - - 静态JSX提升
rendering-hoist-jsx - - 使用三元运算符避免falsy值bug
rendering-conditional-render - - 在无hydration不一致的情况下避免页面闪烁
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 - - 组件组合与提前返回的选择标准
rendering-composition-vs-early-return
5. 클라이언트 데이터/이벤트 (MEDIUM)
5. 客户端数据/事件(中等)
- - 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
- - 使用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)
6. JavaScript性能(低-中等)
- - 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
- - 使用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)
7. 高级模式(低)
- - 이벤트 핸들러를 ref에 저장 (재구독 방지)
advanced-event-handler-refs - - useEffectEvent/useLatest로 안정적 콜백 ref
advanced-use-latest - - 앱 초기화를 컴포넌트가 아닌 모듈 레벨에서
advanced-init-once - - 클로저 스코프 격리로 메모리 누수 방지
advanced-closure-scope
- - 将事件处理程序存储至ref(避免重新订阅)
advanced-event-handler-refs - - 使用useEffectEvent/useLatest实现稳定回调ref
advanced-use-latest - - 在模块级别而非组件内完成应用初始化
advanced-init-once - - 隔离闭包作用域避免内存泄漏
advanced-closure-scope
Vercel 원본 가이드 추가 규칙
Vercel原指南补充规则
이 스킬은 프레임워크 비종속 규칙만 포함. Next.js/SSR 전용 규칙은 원본 참고:
| 규칙 | 영향도 | 설명 |
|---|---|---|
| MEDIUM | |
| HIGH | LRU 캐시로 요청 간 캐싱 |
| HIGH | RSC 경계에서 직렬화 최소화 |
| CRITICAL | 컴포넌트 구성으로 서버 데이터 병렬 페칭 |
| MEDIUM | |
| MEDIUM | 서버 액션 인증 검증 |
| LOW | 중복 props 제거 |
| CRITICAL | |
| LOW | suppressHydrationWarning 사용 |
| MEDIUM | API 라우트 비동기 패턴 |
本技能仅包含与框架无关的规则。Next.js/SSR专属规则请参考原指南:
| 规则 | 影响程度 | 说明 |
|---|---|---|
| 中等 | 使用 |
| 高 | 使用LRU缓存实现跨请求缓存 |
| 高 | 在RSC边界处最小化序列化操作 |
| 关键 | 通过组件组合实现服务器端数据并行获取 |
| 中等 | 使用 |
| 中等 | 服务器端操作的身份验证校验 |
| 低 | 消除重复props |
| 关键 | 使用 |
| 低 | 使用suppressHydrationWarning |
| 中等 | API路由异步模式 |
참고
参考资料
- React 공식 문서
- React Compiler - 사용 시 ,
memo()수동 적용 불필요useMemo() - Vercel: How we made the dashboard twice as fast
- Vercel: How we optimized package imports
- React官方文档
- React Compiler - 使用该工具后无需手动应用、
memo()useMemo() - Vercel:我们如何将仪表板速度提升一倍
- Vercel:我们如何优化包导入