document.getElementById的运行时间

时间:2011-03-20 22:18:16

标签: javascript optimization dom performance

document.getElementById的运行时间是多少?它至多是对数O(log(n)),其中n是DOM中元素的数量,因为DOM是树。它也可以是常量O(1),如果在解析HTML文档期间,所有具有ID的元素都存储在散列中。我一直听到浏览器宣传他们的品牌打击新的javascript引擎改进的DOM访问,所以我甚至不确定所有浏览器的运行时间是否相同。

我问的原因是因为我在Mozilla's WebGL tutorial上看到了这个:

  

我们在这里做的第一件事是获得一个   参考画布,藏匿它   在一个名为canvas的全局变量中。   显然,如果你不需要   你反复参考画布   可以避免保存这个值,而你   也可以将它保存在局部变量中   或对象的成员字段。

如果Mozilla发出警告,也许做$('canvasId')并不像常规操作那么便宜。也许我应该重写我的代码:

$('id').writeAttribute('foo', 'bar');
console.info($('id').getWidth());
$('id').absolutize();

为:

var element = $('id');
element.writeAttribute('foo', 'bar');
console.info(element.getWidth());
element.absoltize();

1 个答案:

答案 0 :(得分:1)

当您必须多次访问该元素时,在局部变量中保留DOM节点的副本总是更好。也就是说,我无法想象你会发现只有三行代码访问该元素会有所不同。