React 性能优化实战(二):渲染机制与优化原理

文章简介

深入解析 React 的渲染机制,包括虚拟 DOM、Diff 算法、Fiber 架构等,帮助开发者理解性能优化的底层原理。

主要内容

虚拟 DOM 与真实 DOM 的关系

React 通过虚拟 DOM(VDOM)实现高效的 UI 更新。每次状态变更时,React 会生成新的虚拟 DOM 树,与上一次的虚拟 DOM 进行对比(Diff),最终只将差异部分同步到真实 DOM,减少了直接操作 DOM 的性能开销。

示例:虚拟 DOM 更新流程

1
2
3
4
5
6
7
8
9
10
11
import React, { useState } from "react";

export default function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<span>{count}</span>
<button onClick={() => setCount(count + 1)}>+1</button>
</div>
);
}
每次点击按钮,React 会重新渲染虚拟 DOM,仅更新变化的 节点。

React 的 Diff 算法原理

React 采用分层比较、同级比较、key 优化等策略,大幅提升了 Diff 的效率。

Diff 算法源码片段(简化版理解)

1
2
3
4
5
6
7
8
9
10
11
// 伪代码,仅用于理解
function diff(oldTree, newTree) {
if (oldTree.type !== newTree.type) {
// 替换整个节点
} else {
// 递归比较子节点
for (let i = 0; i < oldTree.children.length; i++) {
diff(oldTree.children[i], newTree.children[i]);
}
}
}

Fiber 架构与并发渲染

React 16 引入 Fiber 架构,将渲染过程拆分为可中断的小单元(Fiber),支持并发渲染和优先级调度。

Fiber 架构核心思想

渲染流程中的性能影响点

优化渲染的常见策略

代码示例:React.memo 优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import React, { memo } from "react";

type ItemProps = { value: number };

const Item = memo(function Item({ value }: ItemProps) {
console.log("render", value);
return <li>{value}</li>;
});

export default function List({ items }: { items: number[] }) {
return (
<ul>
{items.map((v) => (
<Item key={v} value={v} />
))}
</ul>
);
}

个人经验

结合源码阅读和项目实践,分享理解渲染机制对优化的帮助。

文章作者: Edon Wang(王艺栋)
文章链接: http://edon.website/2025/05/28/React%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E6%88%98-%E6%B8%B2%E6%9F%93%E6%9C%BA%E5%88%B6%E4%B8%8E%E4%BC%98%E5%8C%96%E5%8E%9F%E7%90%86/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Edon Wang's Blog
avatar
Edon Wang(王艺栋)
你好,我是Edon Wang(王艺栋),一名充满热情的开发者,在前端、WebGL、元宇宙和AR/VR领域有多年经验。欢迎来到我的博客!
联系我
公告
WeChat: wyd1520866381
QQ: 1520866381
系列文章
最新文章