React 是一种非常流行的前端框架,但是与其它框架相比,它还是有可能出现性能问题的。因为 React 是通过 Virtual DOM 来实现页面的渲染,而 Virtual DOM 的更新与比对是相对比较耗费性能的。因此,为了保证 React 程序的性能,需要进行性能分析与调优。
性能分析工具
在进行性能分析之前,需要一些工具来帮助我们分析程序的性能。
React Developer Tools
React Developer Tools 是一款 Chrome 浏览器的插件,可以用于分析 React 程序的性能。安装之后,在开发者工具面板中就可使用它。
DevTools
DevTools 是 Chrome 浏览器自带的开发者工具,在 Performance 面板中可以分析程序的性能。需要的技能不算太高。
Lighthouse
Lighthouse 是一种 Web 页面性能分析工具,不仅可以分析 React 程序,还能够分析页面的加载速度、响应速度等等。它会给出相应的改进意见和建议,非常有用。
React 程序的性能调优
在使用上述工具进行性能分析之后,可以针对程序提出一些应对性能瓶颈的调优方法:
减少组件的渲染
React 程序的性能瓶颈主要出现在组件的渲染上。渲染 DOM 的次数越多,界面就会越慢。而 React 为了保证代码的可读性和可维护性,通常会将组件细分成一个个小组件,这样每个组件只渲染自己需要渲染的部分,这虽然能够提高代码的可读性,但是组件的渲染次数就会增多。如果想要减少组件的渲染,可以使用 React.memo(),将组件的渲染结果缓存起来,这样只要组件的 props 没有改变,就不必再次渲染。
-- -------------------- ---- ------- ------ ------ - ---- - ---- -------- ----- ----------- - ------- ----- -- -- - ------ - ----- ------- ------ -- ---
通过 memo() 包装起来的组件,只有 props 发生改变的时候,才会重新渲染。
使用 shouldComponentUpdate
如果一个组件的渲染逻辑比较耗时,那么就可以使用 shouldComponentUpdate() 方法来控制组件是否需要渲染。shouldComponentUpdate() 方法接收两个参数:nextProps 和 nextState,即下一个 props 和下一个 state。只有当这两个参数发生变化的时候,组件才会进行渲染。
-- -------------------- ---- ------- ------ ------ - --------- - ---- -------- ----- ----------- ------- --------- - -------------------------------- ---------- - -- ----------------- --- ---------------- - ------ ------ - ------ ----- - -------- - ------ - ----- ------------------ ------ -- - -
在 shouldComponentUpdate() 方法中,如果判断出 nextProps 和当前 props 的值相等,就可以返回 false,此时组件就不会进行渲染了。
使用 React Profiler
React Profiler 是 React 16 版本中新增加的一种性能分析工具,可以帮助开发者找到渲染较慢的组件,从而针对这些组件进行优化。
-- -------------------- ---- ------- ------ ------ - -------- - ---- -------- -------- ----------------- --- -- ----- -------- ------ ------ -- ----------------- ------- -------- -- --------- --------------- -- ---- --------- ----------- ------------- -- ----- ----------- -------- ------ ---- --- ---------- -- ----- ----- ------- ----------- -- ----- ----- --------- --- ------------ -- ------ ------------ --- - - -- -------- - -------- ------------- - ------ - --------- ---------------- ---------------------------- --- ------ -- --- ----------- -- -
Profiler 的 onRender 回调函数,会在渲染组件的时候被调用,可以将回调函数的信息上传到相应的服务器上。拿到这些信息,开发者就可对程序性能进行分析。
总结
React 程序的性能分析与调优,是一个复杂的过程,需要开发者具备一定的技术能力。但是,正是因为有了这些性能分析工具和优化方法,才让 React 成为前端界的佼佼者。希望本文能够帮助到需要进行性能分析与调优的前端开发者,让他们的程序在性能上更快、更稳定。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645f5c6e968c7c53b0163c9f