首页 > 解决方案 > 什么更节省资源:lodash deepEqual 或每次都创建一个新对象?

问题描述

我有一个复杂的血红素对象,其中包含一些嵌套对象,并且基于这些变量,我在每次重新渲染时的反应组件中创建一个新的样式对象。基本上,这种生成的样式在运行时不应该改变。我需要在第一次创建主题时访问它,所以我不能将它移到组件之外并使用硬编码的主题变量。它必须在运行时创建(我没有找到任何其他方式)。

我不喜欢在每次重新渲染时创建对象,所以我只想做一次,并且只有在主题值已更改时才重新创建。Lodash 备忘录在某种程度上没有帮助,所以我想使用isEqual检查主题是否已更改并重新创建样式对象。

但是我不确定 isEqual 在资源的情况下是否会更好,而不仅仅是简单地创建一个新对象,因为深度对象比较并且算法遍历整个对象并比较它们的每个部分可能需要一些时间. 不是吗?

在性能方面有什么更好的方法?

例如。主题:

theme: {
 color: 'black',
 bg : { color: 'yellow' }
 ... so on
}

const styleCreator = (theme) => { 
     color: theme.bg.color
   }

// COMPONENT
const MyComponent = (props) => {
  // Here I want to save the old theme somewhere
  //  and compare it with the new one by isEqual
  // and only if they are different - create a new style
  const style = styleCreator(props.theme)
  return <h1 style={style} ></h1>
}

标签: javascriptreactjsperformancelodash

解决方案


推荐阅读