以下是微优化

时间:2014-04-10 07:25:37

标签: javascript

我在javascript中解析得不是很好,但你是否称之为微优化?

for(var j=0;j < document.getElementsByTagName('a').length; j++)
{
  //...
}

var Elements = document.getElementsByTagName('a');
var ElementsLength = Elements.length;
for(var j=0;j < ElementsLength ; j++)
{
  //...
}

var Elements = document.getElementsByTagName('a');
for(var j=0;j < Elements.length; j++)
{
  //...
}
  • 确实会在每个循环中调用document.getElementByTagName 在第一种情况下循环?
  • 浏览器是否尝试优化我们编写的javascript?
  • 考虑到第二种和第三种情况之间是否有任何区别 该系列永远不会改变?

1 个答案:

答案 0 :(得分:3)

  在第一种情况下,

是否真的在每个循环周期中调用document.getElementByTagName?

  

浏览器是否尝试优化我们编写的javascript?

它不会在功能上更改它。调用一次函数和每次循环调用它之间有区别;也许你意味着每次都要调用这个函数。 “优化”离开实际上正在改变程序的作用。

  

考虑到收集永远不会改变,第二和第三种情况之间是否存在差异?

不是功能性的,但表现明智是的。访问length属性比从简单变量读取数字要多一些开销。可能不是你真正注意到的,但它就在那里。这也是一个无法优化的情况,因为Elements.length 可能在每次迭代时发生变化,这会使程序的行为不同。一个好的优化者可能能够检测属性是否在不断变化和优化,以防它确定不会;但我不知道有多少实现真的这样做,因为这可能变得非常复杂。