您的位置:首页 > Web前端

前端性能优化:for in循环的优化

2016-07-03 10:15 267 查看
for in循环非常慢,但有时候却不能不使用,那有没有方法改进呢?
for in循环之所以慢,就是因为需要不停的遍历原型链,如果知道能够减少原型链的遍历就可以改进。

改进方法,就是需要遍历的属性明确列出来:
代码:
function createArr() {
var t = [];
for (var i = 0; i < 1000; i++) {
t[i] = { name1: 1, name2: i + 10, name3: i + 3 };
}
return t;
}
/*原始for in循环,复制数组*/
function Test1() {
var t = createArr();
var date1 = new Date().getTime();
var tcopy = [];
var length = t.length;
var total = 0;
for (var i = 0; i < length; i++) {
var obj = {};
for (var item in t) {
obj[item] = t[i][item];
}
tcopy.push(obj);
}
var date12 = new Date().getTime();
console.log("1Test" + ((date12 - date1)));
}
/*for in改进 ,复制数组*/
function Test2() {
var t = createArr();
var date1 = new Date().getTime();
var names = ['name1', 'name2', 'name3'];
var lengthnames = names.length;
var tcopy = [];
var length = t.length;
for (var i = 0; i < length; i++) {
var obj = {};
for (var j = 0; j < lengthnames; j++) {
obj[names[j]] = t[i][names[j]];
}
tcopy.push(obj);
}
var date12 = new Date().getTime();
console.log("2Test" + ((date12 - date1)));
}
/*jquery ,复制数组*/
function Test3() {
var t = createArr();
var date1 = new Date().getTime();
var names = ['name1', 'name2', 'name3'];
var lengthnames = names.length;
var tcopy = [];
var length = t.length;
for (var i = 0; i < length; i++) {
var obj = {};
obj=jQuery.extend(obj, t[i]);
tcopy.push(obj);
}
var date12 = new Date().getTime();
console.log("3Test" + ((date12 - date1)));
}测试后,发现,改进后明确列出需要处理的属性,性能比原来的提高几百倍,比jQuery封装的方法性能高两倍。因此jQuery封装的这个方法还是不错的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: