前端性能优化: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。
- 上一篇: 前端性能优化:循环内部优化
- 下一篇: 前端性能优化:循环优化