【发布时间】:2015-06-04 15:54:35
【问题描述】:
编辑:这个问题主要集中在每次迭代中是否应该在 for 循环(十亿计数的巨大循环)内声明对象,或者最好在 for 循环外声明一次对象以节省对象声明期间的时间(在每个 sprint 中花费的内存分配时间)。
我正在尝试优化我的代码,确保不会花费任何额外的时间为每次迭代中在 for 循环中声明的对象分配内存。
我有一个很长的 for 循环(比如十亿级),它在每次数组迭代中创建巨大的对象并将这些对象推送到数组中。我的问题是,是在 for 循环内声明对象还是在外部声明它更好,这样 JavaScript 运行时就不必花时间在每个 sprint 中为对象分配内存。
这是我尝试过的百万计数循环。尝试了十亿计数,但它没有在我的计算机上完成:
//Case 1: Object declared outside the for loop
function createObjInForLoopWithVarDeclaredOutside() {
var startTime = Date.now();
var obj; //object declared here so that memory allocation is done one time
var targetArray = [];
for(var i = 0; i < 1000000; i++) {
obj = {};
obj.id = i;
obj.value = 'value :: ' + i;
targetArray.push(obj);
}
var endTime = Date.now();
var timeTaken = endTime - startTime;
console.log('Time taken: ' + timeTaken);
}
上述程序花费的时间:505 到 525 毫秒
//Case 2: Object declared and defined inside for loop for each sprint
function createObjInForLoopWithVarDeclaredInside() {
var startTime = Date.now();
var targetArray = [];
for(var i = 0; i < 1000000; i++) {
var obj = {};
obj.id = i;
obj.value = 'value :: ' + i;
targetArray.push(obj);
}
var endTime = Date.now();
var timeTaken = endTime - startTime;
console.log('Time taken: ' + timeTaken); //486 to 509
}
上述程序花费的时间:486 到 509 毫秒
有人可以帮助解释优化执行时间的更好方法吗?对于我在 for 循环中声明对象的第二种方法,我担心这可能需要更长的时间才能运行,因为每次迭代,运行时都必须为可能需要更长时间的新对象分配内存。但是,对于我的分析数据,似乎在 for 循环中声明对象的第二种方法更好。在作用域方面,我个人最喜欢的是在需要时对变量进行 decalre,但对于如此庞大的 for 循环,我确实想看看各种运行时优化。
我不确定是否需要这种优化,以防 JavaScript 在运行代码之前对其进行优化。
【问题讨论】:
-
我很谦虚地想问一下为什么这个问题被否决的原因?我是 Stackoverflow 的新手,但我尽力将所有分析和示例代码放在我的问题中来解释我的问题。如果我知道这里缺少什么,我将不胜感激,以便我可以将其用作未来的输入。谢谢!
标签: javascript arrays optimization variable-declaration