2011-02-16 49 views
6

右,所以我想常識是,你將要訪問很多因素,最好的辦法就是對其進行緩存,像這樣:jQuery/JavaScript緩存元素的效率?

var myEl = $('.myclass'); 

然後你可以訪問$(MYEL)在未來,你不需要再次搜索DOM,對嗎?好吧,讓我說我有一個相當複雜的html結構,我需要訪問很多不同的元素,如20-30。這是非常醜陋的待辦事項這種類型的30倍!

var elA = $('.myela'), 
    elB = $('.myelb'); 

等等等等,你的想法..所以有什麼「壞」在做這個樣子,繼續所有這些要素同一類,但給他們一個唯一的ID,那麼這樣做:

var myElementObject={}; 
$('.myelems').each(function(){ 
    myElementObject[$(this).attr('id')] = $(this); 
}); 

這樣,它就像我得到一個object.whateverId和那緩存的元素,所以現在我很喜歡,而無需重新查詢DOM所有的時間我可以使用它們,就是這個假設是正確的,這是一個糟糕的實踐?你們怎麼去解決它?

謝謝!

回答

3

如果你打算分配ID,那麼只需使用$('#id'),因爲它使用的是getElementById,它非常快速,並且可能不會比將它們放在某個對象散列中慢得多。

也可以考慮將公共類,這些元素或以其他方式將它們分組,使您可以緩存$('.mycommonclass')

+0

我正在用「.myelems」做什麼,在我的描述中它是普通類,但是如果$('#id')如此之快,爲什麼人們繼續關於「最佳」實踐和「總是」緩存你的元素? 這是我沒有得到的東西,我應該只是總是緩存我使用很多或不打擾的元素?它是否真的影響性能很多?我無法找到一個清晰的答案。 – neph 2011-02-16 01:37:52

0

如果您確定要訪問這些元素,那麼這是一個很好的方法(否則這將浪費資源)。另一件小事:如果你在第一個例子中使用myEl而不是$(myEl)來訪問元素,那麼$(myEl)必須執行一個函數(jQuery),這將是最好的。

+1

其實,這是因爲`myEl`已經被包裹在一個jQuery對象。你不必這樣做兩次。 – 2011-02-16 01:34:29