2016-02-26 59 views
0

在一個大的HTML頁面中,選擇一個元素的速度是否由id決定於具有已定義的元素的總數id頁面中的ID數量是否會影響選擇器的效率?

考慮以下情形:我們有一個大的HTML頁面數以萬計的DOM元素,並且我們有一個看起來像這樣10000+元素:

<div id="tooltip555"> 
    <label>Tooltip</label> 
    <div> 
      <i class="icon"></i> 
      <span>Tooltip body</span> 
      ... 
    </div> 
</div> 

我知道這是更快地選擇一個元素直接通過ID(Performance of jQuery selector),所以在技術上,而不是選擇tooltip555與鏈選擇器(如'#tooltip555> div> span')內的組件,如果我爲其計劃的每個子項生成一個id,會更快使用並選擇它使用#tooltip555_div_span,但導致多3倍與定義ID的DOM元素?

+1

'id'屬性的數量,no。元素的數量,是的。但是,除非你有成千上萬的元素,否則它不應該成爲問題。在這種情況下,我會使用'#tooltip555> div> span'選擇器。被篩選的元素匹配集將被id選擇器大幅減少,因此性能應該很好。 –

+0

那麼我想到的第一個想法是,一旦你指定了一個選擇器,jQuery **就有**至少遍歷所有的選擇器,所以'id','class'等應該沒有關係。 –

+0

@RoryMcCrossan,我問這是因爲我確實有性能問題,我有一個單頁網站動態更新其內容,更多的元素生成然後刪除,導致一些腳本涉及許多選擇laggy。我知道我應該重新設計一些算法,但我只是想知道是否可以節省一些時間使用更多/更少的ID,並減少/增加選擇器的複雜性 –

回答

1

如果您避免使用選擇器,它將要快得多,因爲它需要解析DOM,而不是大多數瀏覽器預先存儲在地圖中的ID。例如,您可以通過chrome中的window [「elementId」]訪問帶有id的元素。除非你使用「:first」,否則不要忘記,即使在找到第一個(也是唯一的)元素之後,jquery仍會繼續查看dom。

我會使用$(document.getElementById(「elementId」))來獲得最佳性能。

但是,我再次懷疑你的性能問題來自於此,99%的時間是過度的操縱或內存泄漏導致的問題。

相關問題