React 性能优化思路
我觉得React 性能优化的理念的主要方向就是这两个:
- 减少重新 render 的次数。因为在 React 里最重(花时间最长)的一块就是 reconciliation(简单的可以理解为 diff),如果不 render,就不会 reconciliation。
- 减少计算的量。主要是减少重复计算,对于函数式组件来说,每次 render 都会重新从头开始执行函数调用。
在使用类组件的时候,使用的 React 优化 API 主要是:shouldComponentUpdate
和 PureComponent
,这两个 API 所提供的解决思路都是为了减少重新 render 的次数,主要是减少父组件更新而子组件也更新的情况。
但是在函数式组件里面没有声明周期也没有类,那如何来做性能优化呢?
先分个类,组件什么时候会重新执行?
- 组件自己的状态改变
- 父组件重新渲染,导致子组件重新渲染,但是父组件的 props 没有改变
- 父组件重新渲染,导致子组件重新渲染,但是父组件传递的 props 改变
针对第二点,在FC中,可以通过memo减少rerender
1 2 3 4
| function Component(props) { } const MyComponent = React.memo(Component);
|
通过 React.memo
包裹的组件在 props 不变的情况下,这个被包裹的组件是不会重新渲染的(相当于PureComonent)
默认情况下其只会对 props 的复杂对象做浅层对比(浅层对比就是只会对比前后两次 props 对象引用是否相同,不会对比对象里面的内容是否相同),如果你想要控制对比过程,那么请将自定义的比较函数通过第二个参数传入来实现。