通过Pure Render和Immutable实现React中的性能优化

本文探讨了React中不必要的渲染问题,包括由于setState触发的无变化渲染和父组件props引起的子组件全量更新。通过引入Pure Render(PureComponent)可以减少浅层对象的更新,但无法解决深层对象的性能优化。文章提出结合ImmutableJS来实现深层对象的性能优化,利用其不可变数据结构特性进行高效对比,并在shouldComponentUpdate中控制组件是否重新渲染。尽管ImmutableJS有文件大小和侵入性等缺点,但它能显著提升React应用的性能。
摘要由CSDN通过智能技术生成

简要介绍:React中的render存在着不必要的渲染,可以通过Puer Render(PureComponent)来减少渲染的次数,但是Puer Render只是进行浅比较,无法实现深层对象上的性能优化。Pure Render结合Immutable可以减少渲染次数。

1 . React中的render

仅通过React中的render,存在着不必要的渲染,这种不必要的渲染分为两大类。

(1)自身的state没有改变

在React的render中,只要发生setState行为,就会去重新渲染,即使setState的属性前后并没有发生变化,比如:

class TestComponent extends React.Component{
   
  constructor(props){
    super(props);
    this.state={
      count:0
    }
  }
  componentDidMount(){
    let self=this;
    setTimeout(function(){
      self.setState({
        count:0
      })
    },1000)
  }
  componentDidUpdate(){
    console.log('组件更新了');
  }
  render(){
    return <div>1</div>
  }
}

在这个组件中,我们setState的值在前后并没有发生改变,但是调用此组件会输出:

//组件更新了

说明只要setState发生了,即使值在前后没有发生变化,组件也会重新render。

(2)父组件传递的props会引起所有子组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React进行性能优化是非常重要的,特别是当应用程序变得复杂或数据量较大时。以下是一些React性能优化技巧: 1. 使用React的Memo组件或PureComponent类来避免不必要的重新渲染。这些组件会对props和state进行浅比较,只有在它们发生变化时才会重新渲染。 2. 使用React的shouldComponentUpdate生命周期方法或使用React.memo高阶组件手动控制组件的重新渲染。这些方法可以让你根据需要来决定是否重新渲染组件。 3. 使用React的虚拟化库,如react-virtualized或react-window,来优化长列表或大型数据集的渲染。这些库只渲染可见的部分,而不是整个列表。 4. 使用React的Context API来避免props层层传递。这可以减少组件之间的耦合,并提高性能。 5. 使用React的useCallback和useMemo钩子来缓存函数和计算结果,以避免不必要的重复计算。 6. 使用React的Batching机制来合并多个setState调用,以减少渲染次数。可以使用setState的回调函数或使用React的unstable_batchedUpdates方法。 7. 避免在render方法执行昂贵的计算或操作。可以将它们移到生命周期方法,或者使用useEffect钩子在组件挂载后执行。 8. 使用React DevTools来分析组件渲染的性能瓶颈。它提供了有关组件渲染时间和更新次数的详细信息。 这些是一些常见的React性能优化技巧,但具体的优化策略可能因应用程序的特性而异。重要的是要进行基准测试和性能分析,以确定哪些部分需要进行优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值