javascript - 什么更节省资源: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>
}
解决方案
推荐阅读
- javascript - 如何使用 html 文件附加外部 js-vue 文件
- elasticsearch - 来自 ElasticSearch 的独特搜索结果
- python - 如何从 tkinter 条目为另一个函数生成位置参数
- javascript - 如何在已经存在的 li 标签内添加 Anchor 标签
- swift - BindableObjects SwiftUI 数组
- javascript - 一页滚动网站 - 但如何在动画完成之前禁用滚动
- javascript - 如何解决套接字不向特定通道发送消息的问题?
- knockout.js - 淘汰赛:延迟更新非常慢
- python - 使用日期时间删除日期时间
- swift - 具有相同变量的枚举案例