2014-11-10 8 views
45

Słyszałem, że to nowe metody wybierania elementów DOM. W jaki sposób porównują ze starszymi metodami pod względem wydajności i obsługi przeglądarek?JavaScript querySelector vs. getElementById

W jaki sposób wydajność porównuje się z wykorzystaniem selektora kwerend jQuery?

Czy istnieje zalecenie najlepszej praktyki, z którego zestawu rodzimego korzystać?

+1

Zdefiniuj lepiej. Są prawie zupełnie inne. –

+3

To jest jak pytanie "czy klucz jednolity jest lepszy niż klucz nastawny?" Odpowiedź brzmi: są one potężniejsze i bardziej elastyczne, i tak przy wielu okazjach lepsze, ale 'getElementById' i' getElementsByClassName' są nadal idealne do celów, które opisują ich nazwy. – lonesomeday

+0

Jeśli pytasz konkretnie o miejsca, w których się nakładają, to wszystko zależy. 'qS' i' qSA' mogą być wolniejsze (a może nie). 'qSA' ma szersze ogólne wsparcie niż' gEBCN'. 'gEBCN' zwraca" listę bieżącą ", a' qSA' nie. –

Odpowiedz

58

"Lepsze" jest subiektywne.

querySelector to nowsza funkcja.

getElementById jest lepiej obsługiwany niż querySelector.

querySelector jest lepiej obsługiwany niż getElementsByClassName.

querySelector pozwala znaleźć elementy z zasad, które nie mogą być wyrażone getElementById i getElementsByClassName

Musisz wybrać odpowiednie narzędzie dla danego zadania.

(W powyższym przypadku dla querySelector należy przeczytać querySelector/querySelectorAll).

+4

querySelector support: http://caniuse.com/#feat=queryselector – tazboy

20

Funkcje getElementById i getElementsByClassName są bardzo specyficzne, podczas gdy querySelector i querySelectorAll są bardziej rozbudowane. Domyślam się, że będą one miały gorszy wynik.

Należy również sprawdzić obsługę każdej funkcji w wyszukiwanych wyszukiwarkach. Im jest nowszy, tym większe prawdopodobieństwo braku wsparcia lub funkcji "buggy".

+18

Oto różnica w wydajności: http://jsperf.com/getelementbyid-vs-queryselector Tak, jest niesamowicie duża! Nawiasem mówiąc, podoba mi się ta odpowiedź, ponieważ jest tak krótka, ale wciąż zawiera wiele informacji. – thomas

+0

@thomas twój link jest wyłączony. Czy istnieje działający link w dowolnym miejscu? – user5508297

+1

Istnieje kilka zarchiwizowanych wersji: https://web.archive.org/web/20160108040024/http://jsperf.com/getelementbyid-vs-queryselector Ale test jest rzeczywiście bardzo stary (2010), więc wynik może być bardzo różni się od bardziej nowoczesnych silników. – thomas