前端性能优化:for in循环的优化
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封装的这个方法还是不错的。声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: 前端性能优化:循环内部优化
- 下一篇: 前端性能优化:循环优化
