多级对象javascript

时间:2013-09-27 23:01:10

标签: javascript performance object multi-level

之间在性能方面是否存在差异
for(x=0;x<data.list.length;x++){
//...
}

vs

var dList=data.list;

for(x=0;x<dList.length;x++){
//...
}

非常感谢

3 个答案:

答案 0 :(得分:1)

琐碎不用担心大部分时间。最佳实践说做这样的事情:

for(var x = 0, len = data.list.length; x < len; x++){
   //...
}

如果你倒数到0就更好了,但这是一个不同的问题。

答案 1 :(得分:0)

您在这里实际看到的唯一性能增强是存储长度值,因此无需在每次迭代时进入data.list进行比较。

int size = data.list.length;

for(x=0x<size;x++){
    //...
} 

正如其他人所说,对于99.99999%的案例来说,这是非常微不足道的,甚至在名称空间成为问题时也不赞成。一般的经验法则是你越容易阅读越好的东西。

答案 2 :(得分:0)

我们试一试。

第一种情况:

var start = new Date();
var data = {};
data.list = Array(100000);
for(x=0;x<data.list.length;x++){
    data.list[x] = Math.sqrt(Math.pow(x, 7));
}
var finish = new Date();
console.log(finish - start + "ms"); //245ms

第二种情况:

var start = new Date();
var data = {};
data.list = Array(100000);
var dList = data.list
for(x=0;x<dList.length;x++){
    dList[x] = Math.sqrt(Math.pow(x, 7));
}
var finish = new Date();
console.log(finish - start + "ms"); //251ms

但还有另一种提高效果的方法:

var start = new Date();
var data = {};
data.list = Array(100000);
for(x = data.list.length; x--; ){
    data.list[x] = Math.sqrt(Math.pow(x, 7));
}
var finish = new Date();
console.log(finish - start + "ms"); //199ms

x--返回递减的数字,当它达到零时,其布尔值变为false,因此循环停止。 这比较快,因为与零比较比与任何其他数字相比要快得多。