【发布时间】:2013-09-27 23:01:09
【问题描述】:
在性能方面有区别吗
for(x=0;x<data.list.length;x++){
//...
}
对比
var dList=data.list;
for(x=0;x<dList.length;x++){
//...
}
非常感谢
【问题讨论】:
标签: javascript performance object multi-level
在性能方面有区别吗
for(x=0;x<data.list.length;x++){
//...
}
对比
var dList=data.list;
for(x=0;x<dList.length;x++){
//...
}
非常感谢
【问题讨论】:
标签: javascript performance object multi-level
微不足道,大部分时间不用担心。最佳做法是这样做:
for(var x = 0, len = data.list.length; x < len; x++){
//...
}
如果你倒数到 0 会更好,但这是另一个问题。
【讨论】:
您将在此处实际看到的唯一性能增强是存储长度值,因此无需在每次迭代时都进入您的 data.list 进行比较。
int size = data.list.length;
for(x=0x<size;x++){
//...
}
正如其他人所提到的,这对于 99.99999% 的情况来说是极其微不足道的,当命名空间是一个问题时甚至会皱眉头。一般的经验法则是越容易阅读越好。
【讨论】:
让我们试一试。
第一种情况:
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-- 返回递减数字,当它达到零时,其布尔值变为假,因此循环停止。
这工作得更快,因为与零的比较比与任何其他数字的比较执行得更快。
【讨论】: