【发布时间】:2018-10-26 13:31:21
【问题描述】:
前段时间我对单元格渲染器组件进行了重构以实现性能提升(我有一个巨大的表)。我确实从功能性无状态组件重构为PureComponent。例如:
import React from 'react';
import PropTypes from 'prop-types';
class SomeCell extends React.PureComponent {
render() {
const { pizzaOrder } = this.props;
return (
<>
{pizzaOrder.name}
<br />
{pizzaOrder.price}
</>
);
}
}
SomeCell .propTypes = {
pizzaOrder: PropTypes.object,
};
export default SomeCell ;
现在我看到React.memo 已发布,所以我更新为react@16.6.0 和react-dom@16.6.0(从16.5.2)并从PureComponent 重构为React.memo,期望它会更快(不生命周期方法被调用,函数小于内存中的类等......):
import React from 'react';
import PropTypes from 'prop-types';
const SomeCell = React.memo(function({ pizzaOrder }) {
return (
<>
{pizzaOrder.name}
<br />
{pizzaOrder.price}
</>
);
});
SomeCell .propTypes = {
pizzaOrder: PropTypes.object,
};
export default SomeCell;
令我惊讶的是,性能显着下降。
你知道这可能是什么问题吗?
prod 模式下的配置文件数据(chrome 中没有插件)显示,与之前使用 PureComponent 相比,发生了更多的脚本编写(我的案例的脚本编写时间从 0.5 秒变为 3.8 秒)。
编辑:经过一番调查,这似乎不是 React.memo 的问题,而是新版本的 React。我已将单元格渲染器恢复为 PureComponent 并保留了新的 react@16.6.0 版本,结果(性能显着降低)仍然存在
【问题讨论】:
-
你能把它作为一个问题报告到他们的 github 上吗?
标签: reactjs