react性能优化有哪些

React 性能优化的手段比较多,既有代码层面 的,也有构建层面 的,还涉及到运行时调优。我帮你系统性梳理一份:


🔹 一、渲染性能优化

1. 减少不必要的渲染

  • React.memo:对函数组件做浅比较,避免相同 props 时重复渲染。
  • useMemo / useCallback:缓存计算结果或函数引用,减少子组件 re-render。
  • PureComponent (class 组件):类似 React.memo,内置浅比较。
javascript 复制代码
const Child = React.memo(({ value }: { value: number }) => {
  console.log("render child");
  return <div>{value}</div>;
});

function App() {
  const [count, setCount] = useState(0);
  return <Child value={count} />;
}

2. 合理使用 key

  • key 决定 React Diff 算法的复用策略,避免用 index 作为 key,优先使用唯一 id。

3. 虚拟化长列表

  • react-window / react-virtualized:只渲染可视区域,提高长列表性能。
javascript 复制代码
import { FixedSizeList as List } from "react-window";

<List
  height={400}
  itemCount={1000}
  itemSize={35}
  width={300}
>
  {({ index, style }) => <div style={style}>Row {index}</div>}
</List>

4. 避免在渲染时做重计算

  • 不要在 JSX 里直接做大计算 / map / sort,使用 useMemo 缓存结果。

5. 减少 Context 过度渲染

  • Context 更新会触发所有消费组件刷新。

  • 优化手段:

    • 拆分 Context
    • 或配合 selector hook (比如 use-context-selector)

🔹 二、构建与加载优化

1. 代码分割

  • React.lazy + Suspense 路由级别拆分。
  • dynamic import() 工具函数/图表库等按需加载。

2. Tree Shaking

  • 确保打包工具能清除无用代码(Webpack、Vite 默认支持 ES Module)。

3. 压缩与缓存

  • 使用 gzip 或 brotli 压缩。
  • 配置浏览器缓存策略(静态资源 hash 命名)。

4. 使用 CDN / 按需加载依赖

  • 比如 antd 用 babel-plugin-import 或 unplugin-import 按需引入。

🔹 三、运行时优化

1. 避免频繁状态更新

  • 合并 setState。
  • 使用 批量更新(React 18 自动启用) 。

2. 合理选择状态存储位置

  • 不要把所有状态放在全局(Redux/Context)。
  • 局部状态用 useState 更高效。

3. 使用 Web Worker

  • 把耗时计算移到 Worker,避免阻塞主线程。

4. 节流与防抖

  • 对滚动、输入等高频事件处理函数加上 debounce/throttle。

🔹 四、UI & 交互优化

1. 图片优化

  • 懒加载(<img loading="lazy" />)。
  • 使用合适的格式(WebP、AVIF)。

2. 骨架屏 / 占位符

  • 提升用户感知性能,避免白屏。

3. Suspense + Streaming SSR

  • React 18 支持流式渲染,首屏更快。

🔹 五、开发阶段调优工具

  • React Profiler:分析组件渲染耗时。
  • why-did-you-render:检测不必要的 re-render。
  • Performance 面板(Chrome DevTools):检查内存泄漏、渲染瓶颈。

📌 总结建议(针对你做的性能平台项目):

  1. 表格 / 列表页面 → 用 react-window 做虚拟滚动。
  2. 路由层 → React.lazy 懒加载页面,避免首页加载过大。
  3. 数据计算(统计 / 过滤) → 用 useMemo 缓存。
  4. 表格操作按钮 → 用 React.memo 包裹,减少子组件重复渲染。
  5. ECharts 图表 → 按需 import(只加载需要的图表类型)。

相关推荐
kyriewen37 分钟前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒1 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫1 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus2 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬3 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
Zhao-Jichao3 小时前
AI Prompting for Everyone 课程笔记 - P17 图像生成 Imaging Generation
前端
Highcharts.js4 小时前
智能数据分析组件Orbit 正式发布与快速上手体验教程
前端·人工智能·信息可视化·数据分析系统·highcharts·orbit·智能可视化
螺丝钉tina4 小时前
[Playwright ][16]Playwright + TypeScript API 自动化测试实战:API测试
前端·javascript·typescript
小天源5 小时前
智叟云集系统 · 架构与职责分层
服务器·前端·数据库
Highcharts.js7 小时前
React 中原生支持使用 JSX 组件配置自定义表格 Highcharts Grid
前端·javascript·react.js·前端框架·jsx·highcharts·自定义表格