Что более экономно: loda sh deepEqual или создание нового объекта каждый раз? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть сложный объект heme, который содержит несколько вложенных объектов и на основе этих переменных я создаю новый объект стиля в компонентах реагирования при каждом повторном отображении. По сути, этот сгенерированный стиль не должен меняться во время выполнения. Мне нужно иметь доступ к теме во время ее первого создания, чтобы я не мог переместить ее за пределы компонента и использовать жестко закодированные переменные темы. Он должен быть создан во время выполнения (я не нашел другого пути).

Мне не нравится, когда объект создается при каждом повторном рендеринге, поэтому я хотел бы сделать это только один раз и повторно. -создавать только если значения темы были изменены. Записки Loda sh не помогли, так что я хотел бы использовать 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>
}
...