2011-05-18 14 views
7

DOM'mda böyle bir nesnenin en fazla 1 olduğunu biliyorsam, her zaman eklemem gerekir mi: öncelikle aramayı hızlandırmak için seçiciye mi? Seçim motorunun, eşleşen 1 eleman bulduktan sonra duracağını farz ediyorum, fakat filtrenin gerçekten bir şeyleri yavaşlattığından emin değilim.şunları belirtiyor: İlk olarak jquery seçici yardımında performans?

+0

Bundan şüpheliyim. Tüm öğeleri aldığını, sonra ebeveynler kabındaki ilk element olup olmadığını kontrol ederdim. (soldan sağa). – Raynos

cevap

6

Hayır, (başka jQuery yalnızca kullanmayın varsayarak seçici sözdizimi).

jQuery, tüm seçiciyi alıp tarayıcının işi yapmasına izin vermekten daha yavaş olan, kendisi tarafından (muhtemelen Sizzle'ı kullanarak) ayrıştırır.

+0

İnsan gözünün bunu gözlemleyebilmesi o kadar yavaş olmayacaktır, elbette, ama ** teoride ** yardımcı olmak yerine performansa zarar verir. Ve yine, bu sadece seçici tarayıcı CSS motoru ve dolayısıyla 'querySelectorAll() 'tarafından destekleniyorsa geçerlidir. – BoltClock

+1

Yorumunuza: Bir sayfada hata ayıklamaya çalışırsanız, burada: ilk önce sözde sınıf seçicisi kullanılır, Chrome'un Geliştirici Araçları ile ilgili olarak "Komut Dosyası" sekmesinde "Yakalanmamış istisnalarda durakla" düğmesini etkinleştirebilirsiniz. altta). ': First' ile her seçiminizde 'querySelectorAll' içinde istisna görürsünüz (bkz. [Here] (http://www.trirand.com/blog/?page_id=393/bugs/small-performance-improvements-in-selectors/# p26631)). Birçok durumda ': ilk '' ilk-çocuk' ya da 'yerine: 'türüne (1)' ile değiştirilebilir. Bir: 'ilk '' kullanımı gerçekten yavaş değil, fakat döngüde bir farkı dolduruyor. – Oleg

0

Neredeyse doğru olan bir uygulama; Belirttiğiniz daha fazla seçici, motor ne kadar doğrulamak zorunda kalır.

Yani, sizin durumunuzda, bunun yalnızca bir tane olduğunu biliyorsanız, bunu belirtmeyin.

Ancak, aşağıdaki beyanıyla 100 deyin, bunu fark etmeyeceksiniz bile. :first standart BB sözde sınıf değil ve senin selektör tarayıcılar destekleyerek uygulanan doğal querySelectorAll() DOM işlevine geçirilemez neden olacaktır kullanma gibi