使用Javascript:是长度的方法有效? [英] Javascript: Is the length method efficient?

查看:107
本文介绍了使用Javascript:是长度的方法有效?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在做一些JavaScript编码,我想知道如果长度的方法是precomputed,或者JS引擎铭记。

所以,问题是:

如果我真的检查常为数组的长度,并假定我不会改变它(使它不变通过关闭),我应该precompute长度方法,并将其存储在某些变量?

谢谢!


解决方案

所有主要的跨preters提供原生数组的长度高效的访问,但不喜欢的 节点列表 秒。

在Javascript高效循环


 测试/浏览器火狐2.0歌剧9.1的Internet Explorer 6
天然对于环155(毫秒)121(毫秒)160(ms)的
...
改进的本机虽然环120(毫秒)100(毫秒)110(ms)的


高效的JavaScript code提示


 为(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 NodeLists.

"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 the length property. This takes a little more time than checking against a static number.

这篇关于使用Javascript:是长度的方法有效?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆