写在前面
大约 1 分钟
写在前面
Web 界面由 DOM 树来构成,当其中某一部分发生变化时,其实就是对应的某个 DOM 节点发生了变化。
在 React 中,构建 UI 界面的思路是由当前状态决定界面。
前后两个状态就对应两套界面,然后由 React 来比较两个界面的区别,这就需要对 DOM 树进行 Diff 算法分析。即给定任意两棵树,找到最少的转换步骤。
但是标准的的 Diff 算法复杂度需要 O(n^3)
,这显然无法满足性能要求。要达到每次界面都可以整体刷新界面的目的,势必需要对算法进行优化。这看上去非常有难度,然而 Facebook 工程师却做到了,他们结合 Web 界面的特点做出了两个简单的假设,使得 Diff 算法复杂度直接降低到O(n)
- 两个相同组件产生类似的 DOM 结构,不同的组件产生不同的 DOM 结构
- 对于同一层次的一组子节点,它们可以通过唯一的 id 进行区分
算法上的优化是 React 整个界面 Render 的基础,事实也证明这两个假设是合理而精确的,保证了整体界面构建的性能。