首页 > 解决方案 > 存储在变量中会提高性能吗?var, let, const 也会影响性能吗?

问题描述

例如,在节点应用程序中,使用 express,而不是使用:

app.listen(3000);

我们用:

const port = 3000;
app.listen(port)

它会提高性能吗,不管它有多小?例如,我听说它提高了循环的性能。

题外话: app.listen() 函数不是一个循环吗?还是它使用内置循环?

另外,用 var、let 或 const 声明在性能上是否彼此不同?例如,由于使用 const 声明 - 而不是 var 或 let - 意味着保持变量“端口”不变,它会产生任何影响吗?

标签: javascriptnode.jsperformancevariables

解决方案


不,仅仅通过在变量中存储一个值不会提高性能,事实上,由于发生了额外的内存分配和获取,性能会略有下降。

但是,将计算结果存储在变量中并使用该变量而不是每次需要值时都重新计算它可以提高性能。

转换app.listen(3000)为以下格式没有任何性能优势。

const port = 3000;
app.listen(port)

但是,如果这些port值需要一些计算,例如,

const port = process.env.PORT || 3000;

然后将结果存储在一个变量中并在每次需要端口号时使用该值将比每次计算它具有性能优势。

(在您的示例中,由于该port值仅使用一次,因此将结果存储在变量中是没有意义的。)

例如,我听说它提高了循环的性能。同样,仅当存储在变量中的值需要某种形式的计算时,您才能获得性能优势。

const array = [1,2,3];
const length = array.length;
for (let i =0 ;i<length; i++) {
  console.log(array[i]);
}

与下面的示例相比,上面的示例具有性能优势。

const array = [1,2,3];
for (let i =0 ;i<array.length; i++) {
  console.log(array[i]);
}

在此示例中,在循环的每次迭代中,都必须计算数组的长度,这是不必要的,因为数组不会改变。

题外话: app.listen() 函数不是一个循环吗?还是它使用内置循环?

不,app.listen()不是循环。它是一个事件监听器。节点事件循环在内部处理此类 I/O 操作。您可以在此处阅读有关事件循环的更多信息。


推荐阅读