作者:

比较对 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毫秒

 

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

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

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

 

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

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

 

发表评论

评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.