2011-02-16 20 views
6

Sağ yüzden sağduyu bir sürü erişen olacağız elemanları, en iyi yolu böylece gibi onları önbelleğe olmasıdır tahmin:jQuery/javascript verimliliği için önbellekleme öğeleri?

var myEl = $('.myclass'); 

Ve sonra $ erişmek sadece edebilirsiniz (myEl) Gelecekte ve tekrar DOM aramanıza gerek yok, değil mi? Tamam, 20-30 gibi birçok farklı öğeye erişmem gereken oldukça karmaşık bir html yapısına sahip olduğumu söyleyeyim. Bu tür bir şeyi 30 kez yapmak çok çirkin!

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

Vs vs, bunu bunu böyle yaparken, tüm bu unsurları aynı sınıf tutmak, ama onlara benzersiz bir kimliği vermek "kötü" bir şey var mı .. fikir edinmek, o zaman bunu:

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

bir object.whateverId olsun ve önbelleğe elemanı şu gibi geliyor Bu şekilde, ben DOM her zaman yeniden sorgulama olmadan gibi şimdi ben bunları kullanabilirsiniz, bu varsayım doğruysa bu bir kötü uygulama? Siz nasıl gidiyorsunuz?

Teşekkürler!

cevap

3

Kimlikler atayacaksanız, yalnızca getElementById kullandığı için $('#id') kullanın, bu da çok hızlıdır ve muhtemelen bazı nesne karmasına sığdırmaktan çok daha yavaş değildir.

Ayrıca bu elemanların ortak bir sınıfını uygulayarak veya myEl` zaten bir jQuery nesnesi sarılır `çünkü $('.mycommonclass')

+0

Tam olarak ".myelems" ile yaptığım şey, benim açıklamamda ortak sınıf olurdu, ama evet eğer $ ('# id') çok hızlıysa, insanlar neden "en iyi" uygulamalar ve "her zaman" hakkında oluyor? öğelerinizi önbelleğe aldınız mı? Bu benim elde edemediğim şey, çok fazla kullandığım veya rahatsız etmediğim öğeleri her zaman önbelleğe almalı mıyım? Performansı gerçekten çok etkiler mi? Bunun üzerinde bir _clear_ cevabı bulamıyorum. – neph

+0

@nepth Söz konusu öğe üzerinde çok fazla işlem yapmak üzereyseniz öğeleri genellikle önbelleğe alırım. Örneğin, aynı öğeye bir döngüde erişmek üzereyim. Ayrıca, birkaç kez kullanacaksanız,/vel/css tabanlı sorguları bulmak gibi daha az performanslı sorguları önbelleğe almak için iyi bir fikir. Gerçi küresel olarak sorguları mutlaka önbelleğe almazdım. – Vadim

+0

Evet sanırım bu mantıklı! – neph

0

Bu öğelere erişeceğinizden eminseniz, bunu yapmak için iyi bir yoldur (aksi takdirde kaynaklar boşa harcanır). Başka bir küçük şey: $(myEl)'un bir işlevi (jQuery) yürütmesi gerektiğinden, ilk örneğinizdeki öğeye myEl ve $(myEl)'u kullanarak erişmeniz en iyisidir.

+1

Aslında, bu kadar önbelleğe böylece başka bir şekilde gruplandırarak düşünün. İki kez yapmak zorunda değilsin. –