我正在使用 ag-grid-react 的 SPA React (15.6) 应用程序上使用 Chrome 开发人员工具进行一些性能分析,并且在将分析器的输出与现实相协调时有点麻烦。例如,在下面的屏幕截图中,连接的抽屉组件 (Connect(Drawer), 橙色条) “componentWillReceiveProps” 方法似乎需要大约 2 秒,但其下方没有任何内容。在查看了该方法本身可能需要这么长时间的代码后,我持怀疑态度,因此我在函数内的所有代码周围添加了一些“console.time”语句,并且低看:
抽屉组件WillReceiveProps:0.02001953125ms
这是我的 componentWillReceiveProps 的样子,供参考:
componentWillReceiveProps(nextProps) {
console.time('Drawer componentWillReceiveProps');
if (nextProps.changes.length !== this.props.changes.length &&
nextProps.changes.length === 0 &&
this.state.isDiscarding) {
this.setState({isDiscarding: false});
}
console.timeEnd('Drawer componentWillReceiveProps');
}
那么我在这里错过了什么?我(有点)明白用户计时 api 只显示标记的东西(我今天才刚刚学习这个,所以我对那个 api 的理解至少可以说......),所以它只是如果 React 实际上没有计时 componentWillReceiveProps 内部发生的事情?如果它有用,我正在使用重新选择和 Redux,但我会假设我的选择器在调用 componentWillReceiveProps 之前已经运行,但也许我错了?
无论如何,我认为 Chrome 火焰图有一些我不了解的基本内容,但我已经阅读了很多文章,但对我来说并没有加起来。
更新:添加了 componentWillReceiveProps 实现
更新 2:添加指向 Chrome 配置文件的链接
如果有人有兴趣查看这里的实际配置文件链接,您可以通过打开 Chrome 开发工具,转到性能选项卡,然后单击“加载配置文件”来查看它:
https://www.dropbox.com/s/72e9kwyxr0myec3/delete_react_perf_user_timing?dl=0
更新 3:componentWillReceiveProps 解释
好的,所以看起来 componentWillReceiveProps 确实(以某种方式)最终调用了 mapStateToProps,这可以解释为什么它看起来在配置文件中花费了这么长时间。我猜测 componentWillReceiveProps 调用会被 redux connect 方法或类似的方法取代以完成它的工作,但我还没有验证 请参阅已接受的答案。无论如何,您可以在以下屏幕截图中看到这方面的证据: