gpt4 book ai didi

javascript : blocked scope inside loop , 性能差异

转载 作者:行者123 更新时间:2023-11-30 14:17:02 26 4
gpt4 key购买 nike

我有以下代码片段,

poupulateData(data) {
//lets assume variable data is an array of objects with more 400 data
let arr = [];
let obj;
if (data && data.length) {
for (let i = 0; i < data.length; i++) {
obj= data[i];
arr.push(obj.features);
}
}
}

我已经在循环外声明了变量 obj ,在下面的代码片段中我将在循环内声明 obj ,就像这样

poupulateData(data) {
//lets assume variable data is an array of objects with more 400 data
let arr = [];
if (data && data.length) {
for (let i = 0; i < data.length; i++) {
let obj= data[i];
arr.push(obj.features);
}
}
}

变量obj的内存分配将在循环结束后释放,所以我想知道如果集合很大,在内存分配和性能方面哪个是最好的

最佳答案

在循环中声明的变量将在每个循环中声明,从而分配额外的内存。此外,变量不会在循环后立即清除。您可以通过设置 obj = null 告诉垃圾收集器在每个循环后运行,这将减少您的内存占用,但会花费您一些 CPU 时间。另请记住,您无法直接控制垃圾收集器。 JavaScript 引擎会在运行代码之前对其进行优化,如果您的系统上有足够的可用内存,它很可能会在 CPU 不忙时释放内存。

一般来说,在循环外声明变量并在之后清理它们对性能更好。这是一个例子:

poupulateData(data) {
let arr = new Array(data.length); // set the size to save some memory
let obj = {}; //set it to object to avoid casting it when the loop starts
if (data && data.length) {
for (let i = 0; i < data.length; i++) {
obj = data[i];
arr[i] = obj.features;
}
}
obj = null //clean some memory
i = null
}

通常你不需要关心 JavaScript 中的这些东西。在执行代码之前完成了相当不错的优化。

关于javascript : blocked scope inside loop , 性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53426539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com