SuperAPI AI 工具集

render-optimization

前端与建站

查看项目

更新于 10-16 04:11

技能介绍

用途

本技能提供 React 19+ 的现代渲染性能优化模式,用于诊断和改善 React 应用的渲染性能,减少不必要的组件重渲染,并处理长列表等高频渲染场景。

主要能力

React Compiler 优先(2026 默认策略)

技能给出决策树:若 React Compiler 已启用,则让编译器自动处理 memoization,仅在逃生舱场景使用 useMemo/useCallback,并在 DevTools 中通过 "Memo ✨" 徽章验证;若未启用,则先分析再优化:使用 React DevTools Profiler、定位真实瓶颈、应用针对性优化。

React 19 编译器可自动 memoize:组件重渲染、中间值(类似 useMemo)、回调引用(类似 useCallback)、JSX 元素。

启用方式(资料给出的代码):

// next.config.js (Next.js 16+)
const nextConfig = {
  reactCompiler: true,
}

// Expo SDK 54+ enables by default

验证方式:打开 React DevTools,查找 "Memo ✨" 徽章。

何时仍需手动 memoization

资料列出三类逃生舱场景:

  1. 不应触发重跑的效果依赖:
const stableConfig = useMemo(() => ({
  apiUrl: process.env.API_URL
}), [])

useEffect(() => {
  initializeSDK(stableConfig)
}, [stableConfig])
  1. 不支持编译器的第三方库:
const memoizedValue = useMemo(() =>
  expensiveThirdPartyComputation(data), [data])
  1. 需要精确控制 memoization 边界:
const handleClick = useCallback(() => {
  // Critical callback that must be stable
}, [dependency])

虚拟化阈值

资料给出建议:项目数 < 100 通常常规渲染即可;100–500 考虑虚拟化;500+ 必须虚拟化。

TanStack Virtual 用法示例:

import { useVirtualizer } from '@tanstack/react-virtual'

const virtualizer = useVirtualizer({
  count: items.length,
  getScrollElement: () => parentRef.current,
  estimateSize: () => 50,
  overscan: 5,
})

状态就近放置(State Colocation)

将状态尽可能靠近使用位置。资料对比示例:状态提升过高会导致 Header 等无关组件在 filter 变化时重渲染;将状态放入 FilterableList 内部可实现最小重渲染。

// ❌ State too high - causes unnecessary re-renders
function App() {
  const [filter, setFilter] = useState('')
  return (
    <Header />  {/* Re-renders on filter change! */}
    <FilterInput value={filter} onChange={setFilter} />
    <List filter={filter} />
  )
}

// ✅ State colocated - minimal re-renders
function App() {
  return (
    <Header />
    <FilterableList />  {/* State inside */}
  )
}

性能分析工作流

  1. React DevTools Profiler:录制、交互、分析
  2. 定位:渲染次数或耗时高的组件
  3. 验证:该重渲染是否真的造成性能问题
  4. 修复:应用针对性优化
  5. 测量:确认改进效果

快速见效项

  • Key prop:为列表使用稳定、唯一的 key
  • 懒加载:使用 React.lazy() 做代码分割
  • 防抖:输入处理使用 useDeferredValue
  • Suspense:配合恰当的边界进行流式渲染

关键决策

决策 建议
Memoization 交给 React Compiler 处理(2026 默认)
100+ 项列表 使用 TanStack Virtual
状态放置 尽可能就近放置
性能分析 优化前始终先测量

适用场景

  • 调试 React 应用渲染性能问题
  • 减少不必要的组件重渲染
  • 处理长列表(100 项以上)的渲染卡顿
  • 决定是否以及何时使用 useMemo/useCallback
  • 在 React 19+ 项目中引入 React Compiler

相关技能

  • react-server-components-framework:服务端优先渲染
  • vite-advanced:构建优化
  • e2e-testing:使用 Playwright 进行性能测试

参考资料

  • React Compiler Migration:编译器采用
  • Memoization Escape Hatches:何时需要 useMemo
  • TanStack Virtual:虚拟化
  • State Colocation:状态放置
  • DevTools Profiler:定位瓶颈

限制

资料未提供该技能的具体安装命令、支持的平台范围、收费或价格信息,也未说明其运行环境要求,这些内容暂未提供。