作者:

比较对 NodeList 类型三种循环写法性能

关于这个问题是因为前几天突然看到一种牛逼的循环写法, 当时自以为很牛逼

var alist = document.getElementsByTagName(“a”);

for (var i = 0, item; item = item[i];)  { }

当时不知道是吃了药导致还是怎么了的, 异常兴奋, 居然省略去长度, 那效率肯定会更高.

决定去公司后对比下性能

我很二的在公司开始了测试.

第一种

var alist = document.getElementsByTagName(“a”), temp = [];

for (var i = 0;i < alist.length;i++)  { temp.push( alist[i]); }

第二种, 一直使用的

var alist = document.getElementsByTagName(“a”), temp = [];

for (var i = 0,len = alist.length, item = alist[i];i < len;i++, item = alist[i])  { temp.push( item); }

然后是第三种我当时看着很牛逼的一种写法

var alist = document.getElementsByTagName(“a”), temp = [];

for (var i = 0, item;item = alist[i++];)  { temp.push( item); }

 

测试环境:

循环 10000次

1200个a标签

第一种方法 2652毫秒   2742毫秒    2703毫秒

第二种方法1754毫秒    1809毫秒     1763毫秒

第三种方法1724毫秒    1805毫秒     1817毫秒

 

由此可以发现, 第二种与第三种方法之间的基本又没差异.

可以推测对象的转换不需要消耗多少时间.

第三种方法短小精悍,推荐.

 

写这篇文章的时候,本以为第三种方法会是一种效率极低的方式.

因为看着每次循环时,还需把对象转换.真是奇了怪.

 

发表评论

评论