将字符串提取到变量中是否可以节省内存或性能,或者仅用于提高代码可读性?

问题描述 投票:0回答:1

假设我有这个 ItemWrapper 类,用于生成许多项目。在它的构造函数内部,我使用“位置项”字符串,我知道我只会在这里使用它。

class ItemWrapper {
  allItems = {};
  constructor(someItems = []){
    someItems.forEach(_item => {
      this.allItems.push(new Item({name: _item.Name, position: _item.position, type: "Location Item"}))
    })
  }
}

我在某处读到,避免创建对象以节省内存是一个很好的做法,包括在如上所述的循环中创建字符串。假设我正在使用 ItemWrapper 创建数千个项目,并且这些类型的包装器在我的代码库中随处可见。我知道大多数时候使用字符串变量是提高代码可读性和可重用性的良好做法,但是将该字符串提取到如下所示的变量中实际上是否有一些性能优势?

class ItemWrapper {
  allItems = {};
  constructor(someItems = []){
    const LOCATION_ITEM = "Location Item";
    someItems.forEach(_item => {
      this.allItems.push(new Item({name: _item.Name, position: _item.position, type: LOCATION_ITEM }))
    })
  }
}

我不确定如何测试这一点,因为如果它有所作为,它只会在使用许多这样的类并且所有内存分配都分布在整个应用程序中时才会出现。

javascript
1个回答
0
投票

根据这个实验,没有显着差异:

let start1 = new Date();
for (let i = 0; i < 1000000000; i++) {
    "Location Item";
}
let end1 = new Date();

let LOCATION_ITEM = "Location Item";
for (let i = 0; i < 1000000000; i++) {
    LOCATION_ITEM;
}
let end2 = new Date();

console.log({
    withoutOptimization: end1 - start1,
    withOptimization: end2 - end1
});

每当你想做这种性能比较时,编写压力测试代码,你就会知道答案。

© www.soinside.com 2019 - 2024. All rights reserved.