如何在 React 16 中进行性能分析

Posted

技术标签:

【中文标题】如何在 React 16 中进行性能分析【英文标题】:How to do perf analysis in React 16 【发布时间】:2018-06-13 16:11:27 【问题描述】:

React 文档声明 react-addons-perf 不适用于 React 16,但 Chrome's built-in tools provide equivalent functionality。我没有发现这种情况。

例如,假设我犯了一个经典错误,即在元素列表 (demo code is on GitHub) 中未包含正确的 key

  render() 

    const items = this.state.items.map((item, index) => <ListItem key=index name=item.name />)

    return <div>
      <button onClick=this.addItem>Add item</button>
      <ul>items</ul>
    </div>;
  

当我将项目添加到列表时,key=index 问题将导致每个 ListItem 重新渲染。使用 React 15 perf 工具,我可以很容易地发现这一点:

应用修复后,我可以看到问题已经消失:

但是,对于 React 16 和 Chrome 开发工具,我不确定如何获取等效信息。 (Demo code with React 16.) 以下是出现错误时的分析结果:

以下是该错误不存在时的分析结果:

我不知道如何查看这些分析结果并获得 react-addons-perf 提供的相同信息。而且,我的结果看起来一点也不像 React 文档:

我使用的是 Chrome 63.0.3239.108。 React 团队是否使用不同版本的 Chrome,或者您是否需要启用特殊标志才能使其正常工作?

潜在相关:How can I measure wasted renders in React 16?。

tl;博士

如何从 Chrome 分析器中获取有用的信息? 为什么我的分析器会话看起来与 React 文档不同?

更新

谢谢罗伯。米!原来我在开发工具中查看错误的选项卡。当我打开 User Timing 部分时,我看到了好与坏之间的区别:

糟糕,有很多 ListItem 更新:

很好,有一个ListItem 更新:

【问题讨论】:

我认为它看起来不同,因为您正在查看“主要”,而不是“用户计时” - 尝试扩展该部分 没错!如果您将评论转换为答案,我会将其标记为已接受。 您应用的修复程序是什么。 【参考方案1】:

React 事件记录在“用户计时”标签下 - 如果您展开该标签而不是“主”标签,您应该会找到您正在寻找的组件性能数据。

【讨论】:

截图欣赏。 我有一个名为“Timings”的标签,我使用的是 Google Chrome 80.0.3987.106。

以上是关于如何在 React 16 中进行性能分析的主要内容,如果未能解决你的问题,请参考以下文章

react渲染原理分析

什么是虚拟DOM(React16源码分析)

React 16 加载性能优化指南

如何对react进行性能优化

React Profiler-React性能审查工具

如何在 Play Store 上的 React Native 应用程序中使用 Firebase Analytics 上传其分析数据?