一般来说,访问任何类型的DOM,当同一个DOM属性或方法被访问一次以上时,最好使用一个局部变量缓存该DOM成员。当遍历一个集合时,第一个要优化的是将集合引用存储于局部变量,并在循环之外缓存length属性。然后,如果在循环体中多次访问同一个集合元素,那么使用局部变量缓存它。
在下面示例中,循环访问每个元素的3个属性。执行最慢的方法是每次都要访问全局变量document,优化后的代码缓存了一个指向集合的引用,执行最快的方法是将集合的当前元素存入局部变量。
//较慢方法
function collectionGlobal{
var coll=document.getElementsByTagName_r('p'),len=coll.length,name='';
for(var count=0;count<len;count++){
name=document.getElementsByTagName_r('p')[count].nodeName;
name=document.getElementsByTagName_r('p')[count].nodeType;
name=document.getElementsByTagName_r('p')[count].tagName;
}
return name;
};
//较快方法
function collectionLocal{
var coll=document.getElementsByTagName_r('p'),len=coll.length,name='';
for(var count=0;count<len;count++){
name=coll[count].nodeName;
name=coll[count].nodeType;
name=coll[count].tagName;
}
return name;
};
//最快方法
function collectionNodesLocal{
var coll=document.getElementsByTagName_r('p'),len=coll.length,name='',el=null;
for(var count=0;count<len;count++){
el=coll[count];
name=el.nodeName;
name=el.nodeType;
name=el.tagName;
}
return name;
};