Javascript:长度方法有效吗? [英] Javascript: Is the length method efficient?

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

问题描述

我正在做一些 javascript 编码,我想知道长度方法是预先计算"的,还是被 JS 引擎记住了.

所以,问题是:

如果我经常检查数组长度,并假设我没有改变它(通过闭包使其不可变),我是否应该预先计算长度方法并将其存储在某个变量中?

谢谢!

解决方案

所有主要的解释器都为本地数组的长度提供了有效的访问器,但不是像 NodeLists.

Javascript 中的高效循环"<块引用>

测试/浏览器 Firefox 2.0 Opera 9.1 Internet Explorer 6本机 For-Loop 155 (ms) 121 (ms) 160 (ms)...改进的 Native While-Loop 120 (ms) 100 (ms) 110 (ms)

高效 JavaScript 代码" 建议

<块引用>

for( var i = 0; i 


var rows = document.getElementsByTagName('tr');for( var i = 0; i < rows.length; i++ ) {行[i].className = 'newclass';行[i].style.color = '红色';...}

这些都不是有效的.getElementsByTagName 返回一个动态对象,而不是一个静态数组.每次检查循环条件时,Opera 都必须重新评估对象,并计算出它引用了多少元素,以计算出 length 属性.这比检查静态数字需要更多时间.

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天全站免登陆