Вы всегда можете проверить производительность на этом сайте в нескольких браузерах: jsperf.com ... Вот несколько тестовых примеров для просмотра: jsperf.com/browse
iwasrobbed
Ответы:
164
Обновить:
Я провел тест после комментария и четыре раза поддержал очень комментарий. Оказывается, то, что я сказал, - правильный ответ. Вот результат:
Это isмногоцелевой, вы можете, например, делать is('.class')и is(':checked')т. Д., Что означает, что у isнего больше возможностей, где hasClassон ограничен, который только проверяет, установлен ли класс или нет.
Следовательно, hasClassдолжно быть быстрее, если производительность на любом уровне является вашим приоритетом.
@SgtPooki, я просто просил доказательства; если это правда, я хотел знать почему. Я такой любознательный :). Вы можете легко расширить функциональность и сделать ее быстрее; это всегда зависит от реализации. Ваши 99% - это широкое обобщение и не обязательно истинное состояние разработки программного обеспечения. Ваш вопрос: «Будет ли jQuery когда-нибудь так же быстр, как обычный JavaScript? Ответ, отличный от« нет », неверен». не лучший вопрос; jQuery на самом деле имеет множество оптимизаций, которые обеспечивают более быстрый доступ к элементам DOM после кэширования данных; это действительно зависит от вашего конкретного использования.
Крис
1
@SgtPooki насколько быстрее взгляните на движок селектора sizzle; поскольку я продолжаю упоминать, это зависит от реализации, и в старых браузерах, которые изначально не поддерживают запросы, это, скорее всего, будет быстрее благодаря реализации jQuery, поскольку нет собственной версии (по умолчанию выигрывает). Также, если вы продолжаете вспоминать одни и те же элементы DOM, в зависимости от браузера и версии, может потребоваться дополнительное время, поскольку jQuery может кэшировать этот элемент для более быстрого поиска. Обычно собственные функции JavaScript работают быстрее; но это зависит от поддержки и реализации браузером.
Крис
13
Поскольку isон более общий, чем hasClassи использует filterдля обработки предоставленного выражения, кажется вероятным, чтоhasClass это быстрее.
Не большая разница, но может иметь значение, если вы много делаете тестов.
ИЗМЕНИТЬ, когда я говорю «не большая разница, я хочу сказать, что вам нужно сделать 10000 циклов, чтобы увидеть разницу в 0,8 секунды. Я был бы удивлен, если бы увидел веб-приложение, в котором переключение с isна hasClassпривело бы к значительному улучшению общей производительности. Однако я допускаю, что это увеличение скорости на 35%.
Ответы:
Обновить:
Я провел тест после комментария и четыре раза поддержал очень комментарий. Оказывается, то, что я сказал, - правильный ответ. Вот результат:
http://jsperf.com/hasclass-vs-is-so
Это
is
многоцелевой, вы можете, например, делатьis('.class')
иis(':checked')
т. Д., Что означает, что уis
него больше возможностей, гдеhasClass
он ограничен, который только проверяет, установлен ли класс или нет.Следовательно,
hasClass
должно быть быстрее, если производительность на любом уровне является вашим приоритетом.источник
hasClass
это намного быстрее.Поскольку
is
он более общий, чемhasClass
и используетfilter
для обработки предоставленного выражения, кажется вероятным, чтоhasClass
это быстрее.Я запустил следующий код из консоли Firebug:
Я получил:
Не большая разница, но может иметь значение, если вы много делаете тестов.
ИЗМЕНИТЬ, когда я говорю «не большая разница, я хочу сказать, что вам нужно сделать 10000 циклов, чтобы увидеть разницу в 0,8 секунды. Я был бы удивлен, если бы увидел веб-приложение, в котором переключение с
is
наhasClass
привело бы к значительному улучшению общей производительности. Однако я допускаю, что это увеличение скорости на 35%.источник
Оба должны быть довольно близки по производительности, но
$('#foo').hasClass('bar');
мне кажутся более читаемыми и семантически правильными.источник
.hasClass
намного быстрее, чем.is
вы можете протестировать здесь . Измените тестовый пример по своему усмотрению.источник