2011-03-20 51 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節點的副本中的局部變量始終是更好時,你必須多次訪問該元素。這就是說,我無法想象你會注意到只有三行代碼訪問該元素的區別。