React SPA 中的性能分析与调优

阅读时长 5 分钟读完

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

纠错
反馈