2011-03-20 55 views
1

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

我之所以这么问是因为我读这对Mozilla's WebGL tutorial

我们在这里做的第一件事是获得 参考帆布,在一个名为画布全局变量积攒它 。 显然,如果您不需要重复引用画布 ,您可以避免保存此值,并且您还可以将其保存在局部变量 或对象的成员字段中。

如果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

我在您提供的报价中看不到警告。它只是解释你可以保持变量或不变。我肯定会在一个函数中使用局部变量,但会避免使用全局变量。但绝对第二个例子更快(问题是多少虽然)。 – 2011-03-20 22:23:42

+5

您可能会发现这篇文章与您的兴趣相关:http://stackoverflow.com/questions/2711303/javascript-getelementbyid-lookups-hash-map-or-recursive-tree-traversal – jbrookover 2011-03-20 22:24:07

回答

1

保持DOM节点的副本中的局部变量始终是更好时,你必须多次访问该元素。这就是说,我无法想象你会注意到只有三行代码访问该元素的区别。