【问题标题】:React: Props destructuring and memory usageReact:道具解构和内存使用
【发布时间】:2018-07-05 09:15:23
【问题描述】:

如果声明的常量只使用一次,使用解构赋值会影响内存使用/性能吗?在其他语言(Java、C 等)中,如果变量只使用一次,最好不要声明它,因为它会分配不必要的内存。 ES6 JS 也是如此吗?

我有两个例子来说明我在说什么。第一个使用解构赋值并且只调用每个常量一次。第二个每次使用时都会调用this.props,并没有提前声明。哪个使用更少的内存?我们的代码库在这两者之间相当均匀,但我很好奇哪种方式更适合规模化。

对单引用变量进行解构赋值:

render(){
   const {
      a, b, c, d, e, f, g, h, i
   } = this.props;
   return(
      <div>
         <div id={a}>some text relevant to a</div>
         <div id={b}>some text relevant to b</div>
         <div id={c}>some text relevant to c</div>
         <div id={d}>some text relevant to d</div>
         <div id={e}>some text relevant to e</div>
         <div id={f}>some text relevant to f</div>
         <div id={g}>some text relevant to g</div>
         <div id={h}>some text relevant to h</div>
         <div id={i}>some text relevant to i</div>
      </div>
   );
}

不为单引用变量声明常量:

render(){
   return(
      <div>
         <div id={this.props.a}>some text relevant to a</div>
         <div id={this.props.b}>some text relevant to b</div>
         <div id={this.props.c}>some text relevant to c</div>
         <div id={this.props.d}>some text relevant to d</div>
         <div id={this.props.e}>some text relevant to e</div>
         <div id={this.props.f}>some text relevant to f</div>
         <div id={this.props.g}>some text relevant to g</div>
         <div id={this.props.h}>some text relevant to h</div>
         <div id={this.props.i}>some text relevant to i</div>
      </div>
   );
}

【问题讨论】:

  • JS 的一般规则是,除非你特别注意到一个问题,否则不要担心。如今,所有常见的引擎都是 JIT,因此完全有可能完全优化这些变量。归根结底,这个问题无法回答,因为它取决于 JIT 发生的任何优化,甚至可能在同一引擎中根据代码的使用方式而有所不同。
  • @loganfsmyth 在哪里可以找到更多关于道具解构的 JIT 细节?

标签: javascript reactjs memory ecmascript-6 destructuring


【解决方案1】:

我会反对第一个答案。做的时候

const {
      a, b, c, d, e, f, g, h, i
} = this.props;

您为这些变量分配内存。尽管您需要一些额外的内存,但这并不重要,因为对象(包括数组、函数等)将被定义为引用/指针。

【讨论】:

  • 在大多数情况下,性能差异可以忽略不计。我发现自己在这里是因为我有一个循环超过数百甚至数千次迭代,每个迭代都解构一两个变量。就我而言,优化至关重要。这种规模的差异会很明显吗?
猜你喜欢
  • 2020-06-20
  • 2019-04-20
  • 2019-04-11
  • 2017-09-24
  • 1970-01-01
  • 2018-12-15
  • 2018-04-08
  • 2021-12-17
  • 2019-02-03
相关资源
最近更新 更多