使用Javascript:是长度的方法有效? [英] Javascript: Is the length method efficient?
问题描述
我在做一些JavaScript编码,我想知道如果长度的方法是precomputed,或者JS引擎铭记。
所以,问题是:
如果我真的检查常为数组的长度,并假定我不会改变它(使它不变通过关闭),我应该precompute长度方法,并将其存储在某些变量?
谢谢!
所有主要的跨preters提供原生数组的长度高效的访问,但不喜欢的 节点列表
秒。
测试/浏览器火狐2.0歌剧9.1的Internet Explorer 6
天然对于环155(毫秒)121(毫秒)160(ms)的
...
改进的本机虽然环120(毫秒)100(毫秒)110(ms)的
块引用>为(VAR I = 0; I< document.getElementsByTagName('TR')长;我++){
document.getElementsByTagName('TR')[我机] .className ='的NewClass';
document.getElementsByTagName('TR')[I] .style.color ='红';
...
}
VAR行= document.getElementsByTagName('TR');
对于(VAR I = 0; I< rows.length;我++){
行[我机] .className ='的NewClass';
行[I] .style.color ='红';
...
}
这些都不是有效的。
的getElementsByTagName
返回一个动态的对象,而不是静态数组。每个循环条件检查的时候,Opera有重新评估的对象,制定出有多少元素的引用,以制定出长度
属性。这需要一点点的时间比对着一个静态的数字检查。
块引用>i'm doing some javascript coding and I was wondering if the length method is "precomputed", or remembered by the JS engine.
So, the question is:
If I'm checking really often for an array length, and supposing that i'm not changing it (making it immutable through a closure), should I precompute the length method and store it in some variable?
Thanks!
解决方案All major interpreters provide efficient accessors for the lengths of native arrays, but not for array-like objects like
NodeList
s."Efficient looping in Javascript"
Test / Browser Firefox 2.0 Opera 9.1 Internet Explorer 6 Native For-Loop 155 (ms) 121 (ms) 160 (ms) ... Improved Native While-Loop 120 (ms) 100 (ms) 110 (ms)
"Efficient JavaScript code" suggests
for( var i = 0; i < document.getElementsByTagName('tr').length; i++ ) { document.getElementsByTagName('tr')[i].className = 'newclass'; document.getElementsByTagName('tr')[i].style.color = 'red'; ... }
var rows = document.getElementsByTagName('tr'); for( var i = 0; i < rows.length; i++ ) { rows[i].className = 'newclass'; rows[i].style.color = 'red'; ... }
Neither of these are efficient.
getElementsByTagName
returns a dynamic object, not a static array. Every time the loop condition is checked, Opera has to reassess the object, and work out how many elements it references, in order to work out thelength
property. This takes a little more time than checking against a static number.
这篇关于使用Javascript:是长度的方法有效?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!