防止反应将未更改的组件呈现到虚拟DOM中

防止反应将未更改的组件呈现到虚拟DOM中,第1张

防止反应将未更改的组件呈现到虚拟DOM中 提高ReactJS渲染性能

首先,除非您在应用程序中看到需要,否则不要花时间在此上。根据虚拟DOM进行检查是一项非常便宜的 *** 作。但是,如果您需要优化应用程序,则可以通过一些策略来实现。

防止反应将未更改的组件呈现到虚拟DOM中(如您所要求的)

有两种广泛的方法可以这样做:

  • 不重新渲染将产生相同输出的组件
  • 除非更改,否则不对组件应用更改
不重新渲染将产生相同输出的组件

您可以避免使用shouldComponentUpdate进行重新渲染。为了

shouldComponentUpdate
提高效率,您可以使用框架来确保状态中只有不可变的对象,或者您可以简单地养成不变异对象,而是创建新对象的习惯。请参阅React不变性助手。在将nextState和nextProps与当前状态和props比较时,这将使您可以进行浅层检查(可以使用shallowCompare轻松完成)。

不对组件应用不变

这意味着仅当新值与当前值不同时才 更新 状态或道具。这种方法并不经常提出,但我认为它值得一提。

状态: 只有做到

setState({ value: newValue })
,如果
newValue !==this.state.value
。这可以通过多种方法来实现,但是一种方法是实际在进行检查之前进行检查
setState()

道具: 如果非变化来自道具,则通常是因为父组件拥有一个值(处于其状态)作为道具传递给其 另一个
子级中的一个。然后,父组件需要重新渲染自己及其所有子组件。如果只希望更改依赖于值的组件,则可以让这些组件监听 全局应用程序状态
的一部分,并仅注入对该组件有用的内容。这样,该值将直接传递给对它感兴趣的那些组件,而不会重新渲染其他组件。

(在多个组件依赖同一数据的情况下,这消除了将状态存储在公共父组件中的需求。除了提高效率之外,这通常还使得创建依赖于现有组件某些部分的新组件更加容易。应用状态。)

您可以使用Flux,Redux或Baobab维护全局应用程序状态
,仅举几个例子。

使用 全局应用程序状态的
另一个优势是,您可以实现检查(在应用程序状态处理程序中),以确保仅通过实际更改来更新应用程序状态(即,如果设置的值与以前相同,则不设置值)。

组件更小:减少每次更改要重新呈现的DOM元素的数量

减少重新渲染成本的另一种策略是使组件更小。然后,每个数据更改仅适用于DOM的一小部分,因为每个组件具有较少的要呈现的元素。

我认为您应该 始终尝试这样做 ,因为除了性能方面,它还使您的代码更易于理解,可重用和可维护。

选择策略

每种策略都可以单独使用或结合使用,但是应用第一组中的两种策略通常不会显示出仅应用其中一种的显着改进。

我建议从缩小组件的角度开始,因为如上所述,这样做还具有其他优点。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5642395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存