W jQuery jest selektor $ ("[id = foo]") mniej wydajny niż $ ('# foo')?
Odpowiedz
krótkie i proste: TAK!
długa historia (jeszcze krótki faktycznie)
$('[id=foo]')
wykorzystuje Sizzle (CSS silnika zapytanie), aby wybrać element, natomiast
$('#foo')
bezpośrednio wywołuje
getElementById
.
Aby mieć bardzo długą historię, zaczynamy: $('[id=foo]')
jest synonimem $('*:[id=foo]')
który używa selektora uniwersalnego. Oznacza to, że zapytuje węzły w twoim znaczniku, a następnie sprawdza, które z nich mają numer id === foo
(który, miejmy nadzieję, dopasuje tylko jeden element, IDs = unikalny). To oczywiście kosztowne, dość kosztowne. I dlatego nigdy nie powinieneś pisać takiego selektora! Zawsze w pełni kwalifikować, jeśli to możliwe, jak $('span:[id=foo]')
tak.
Najszybszy selektor jQuery jest selektor ID $ ('# foo'), ponieważ mapy bezpośrednio do natywnego metody JavaScript, getElementById()
- 1. Różnica między "struct foo *" i "foo *" gdzie foo jest strukturą?
- 2. Dlaczego kompilowany jest kod "foo :: foo :: foo :: foob"?
- 3. Jaka jest różnica między: foo, :: foo, :: bar/foo i: bar/foo w Clojure?
- 4. Porównanie wydajności $ ("# foo .bar") i $ (".bar", "#foo")
- 5. Różnica między klasą foo, klasą foo() i klasą foo (obiektem)?
- 6. 'goto * foo', gdzie foo nie jest wskaźnikiem. Co to jest?
- 7. Czy "x = new (Foo)" jest takie samo jak "x = new Foo" dla dowolnego Foo?
- 8. Jaka jest nazwa funkcji [foo, bar] = ["foo", "bar"]?
- 9. Jaka jest różnica między `raise" foo "` i `raise Exception.new (" foo ")`?
- 10. Jaka jest różnica między "#if Foo - 0 == 0" i "#if defined (Foo) && Foo == 0"?
- 11. selektor jQuery. Dlaczego $ ("# id") znajdują ("P") szybciej niż $ ("# id P")
- 12. "new Foo() {}" w porównaniu z "new Foo()" w Javie
- 13. Dlaczego ("foo" === nowy ciąg ("foo")) ocenia na false w JavaScript?
- 14. Dlaczego warto używać parametru funkcji "foo" w następujący sposób: * (& foo)?
- 15. Jak selektor elementów jest bardziej szczegółowy niż selektor id?
- 16. @ManyToMany (mappedBy = "foo")
- 17. Bezwzględne ("/ foo") i względne ("../foo") nazwy plików. Jak nazywa się kategoria "foo"?
- 18. Co to jest Foo w AS3?
- 19. PHP: Czy istnieje różnica między {$ foo} a $ {foo}
- 20. Kiedy "strażnik niech foo = foo" staje się legalny?
- 21. Różnica między "if (foo) bar();" i "foo && bar();"
- 22. std :: unordered_set <Foo> jako członek klasy Foo
- 23. scala: 'def foo = {1}' vs 'def foo {1}'
- 24. Przypisywanie wynik funkcji, która zwraca Foo do const Foo &
- 25. jQuery sprawdzanie poprawności mniej niż
- 26. Dlaczego kompilacja erlang: foo()?
- 27. Jaka jest różnica między "foo = Nothing" i "foo is Nothing" w VB.NET?
- 28. Co to jest `int foo :: * bar :: *`?
- 29. „NSInternalInconsistencyException”, powód: „Foo” nie jest podklasą NSManagedObject
- 30. svn: URL <foo> z istniejącego dierctory <foo> nie pasuje do oczekiwanego adresu URL <foo>
Ahh heres sub-pytanie do ciebie, to JANDY - jest '$ ('span: [id = foo]') 'just longhand dla' $ (span # foo) 'lub inny selektor w ogóle? – HurnsMobile
@HurnsMobile: Wcale nie. '$ ('span: [id = foo]')'. Właściwie poleciłabym przejrzenie kodu inicjującego jQuery tutaj. jQuery analizuje niektóre selektory do bezpośredniego wywołania 'getElementById' lub' getElementsByTagName', myślę, że '$ (span # foo)' jest jednym z nich. Jest to zdecydowanie szybsze niż '$ ('span: [id = foo]')'. To wyrażenie przejdzie w Sizzle i to oczywiście trwa dłużej niż jedna z wyżej wymienionych metod. – jAndy
Bardzo pouczające, wielkie dzięki. Powodem, dla którego rozważałem użycie czegoś innego niż $ ("# foo") do kierowania na identyfikator, jest to, że id, na który celowałem miał okres, co jest oczywiście problematyczne, ponieważ jQuery zinterpretuje to jako id i klasę. Używając $ ("[id = Address.State]", na przykład, mógłbym obejść problem. Innym sposobem obejścia tego problemu jest podwójne wyjście z okresu, jak w $ ("# Address \\. State"), ale myślałem, że podwójne ucieczki mogą być mniej czytelne. Jednak biorąc pod uwagę utratę wydajności, którą wskazałeś, prawdopodobnie i tak by to wykorzystałem. – jbyrd