Zawsze możesz sprawdzić wydajność na tej stronie, a także w wielu przeglądarkach: jsperf.com ... Oto kilka przypadków testowych do przejrzenia: jsperf.com/browse
iwasrobbed
Odpowiedzi:
164
Aktualizacja:
Popełniłem test po komentarzu i czterech pozytywnych głosach za bardzo komentarz. Okazuje się, że to, co powiedziałem, jest poprawną odpowiedzią. Oto wynik:
isJest wielofunkcyjny, można na przykład zrobić is('.class'), is(':checked')itp, które środki isma więcej do zrobienia , gdzie jest hasClassograniczona, który sprawdza tylko bytem zestaw klasy, czy nie.
Dlatego hasClasspowinno być szybsze, jeśli priorytetem jest wydajność na jakimkolwiek poziomie.
@SgtPooki, po prostu prosiłem o dowód; jeśli to prawda, chciałem wiedzieć, dlaczego. Jestem taki dociekliwy :). Możesz łatwo mieć większą funkcjonalność i szybciej; zawsze zależy od implementacji. Twoje 99% to szerokie uogólnienie i niekoniecznie prawdziwy stan rozwoju oprogramowania. Twoje pytanie „Czy jQuery będzie kiedykolwiek tak szybkie jak zwykły JavaScript? Odpowiedź inna niż nie jest błędna”. to nie jest dobre pytanie; jQuery faktycznie ma wiele optymalizacji, które zapewnią szybszy dostęp do elementów DOM po zbuforowaniu danych; to naprawdę zależy od konkretnego zastosowania.
Kris
1
@SgtPooki o ile szybciej spójrz na silnik selektora sizzle; jak nadal wspominam, zależy to od implementacji, aw starszych przeglądarkach, które nie obsługują natywnie zapytań, najprawdopodobniej będzie szybsze dzięki implementacji jQuery, ponieważ nie ma wersji natywnej (domyślnie wygrana). Ponadto, jeśli kontynuujesz przywoływanie tych samych elementów DOM, w zależności od przeglądarki i wersji, może to zająć więcej czasu, ponieważ jQuery może buforować ten element w celu szybszego pobierania. Zwykle natywne funkcje JavaScript będą działać szybciej; ale zależy to od obsługi i implementacji przeglądarki.
Kris
13
Ponieważ isjest bardziej ogólny niż hasClassi używa filterdo przetwarzania podanego wyrażenia, wydaje się prawdopodobne, że hasClassjest szybszy.
Nie jest to duża różnica, ale może być istotna, jeśli wykonujesz dużo testów.
EDYTUJ, kiedy mówię `` nie jest to wielka różnica, chodzi mi o to, że musisz zrobić 10000 cykli, aby zobaczyć 0,8 sekundy różnicy. Zdziwiłbym się, widząc aplikację internetową, w której przełączenie się z na isdo hasClassspowodowałoby znaczną poprawę ogólnej wydajności. Jednak przyznaję, że jest to 35% poprawa szybkości.
Odpowiedzi:
Aktualizacja:
Popełniłem test po komentarzu i czterech pozytywnych głosach za bardzo komentarz. Okazuje się, że to, co powiedziałem, jest poprawną odpowiedzią. Oto wynik:
http://jsperf.com/hasclass-vs-is-so
is
Jest wielofunkcyjny, można na przykład zrobićis('.class')
,is(':checked')
itp, które środkiis
ma więcej do zrobienia , gdzie jesthasClass
ograniczona, który sprawdza tylko bytem zestaw klasy, czy nie.Dlatego
hasClass
powinno być szybsze, jeśli priorytetem jest wydajność na jakimkolwiek poziomie.źródło
hasClass
jest dużo szybszy.Ponieważ
is
jest bardziej ogólny niżhasClass
i używafilter
do przetwarzania podanego wyrażenia, wydaje się prawdopodobne, żehasClass
jest szybszy.Uruchomiłem następujący kod z konsoli Firebug:
Mam:
Nie jest to duża różnica, ale może być istotna, jeśli wykonujesz dużo testów.
EDYTUJ, kiedy mówię `` nie jest to wielka różnica, chodzi mi o to, że musisz zrobić 10000 cykli, aby zobaczyć 0,8 sekundy różnicy. Zdziwiłbym się, widząc aplikację internetową, w której przełączenie się z na
is
dohasClass
spowodowałoby znaczną poprawę ogólnej wydajności. Jednak przyznaję, że jest to 35% poprawa szybkości.źródło
Oba powinny być dość zbliżone pod względem wydajności, ale
$('#foo').hasClass('bar');
wydają mi się bardziej czytelne i poprawne semantycznie.źródło
.hasClass
jest znacznie szybszy niż.is
możesz go przetestować tutaj . Zmień przypadek testowy według siebie.źródło