jquery родительский потомок селектор

Почему 1 быстрее 2?

  1. $ ('# p1'). find ('span');
  2. $ ('# p1 span');
1
задан NullUserException 18 August 2010 в 18:51
поделиться

3 ответа

В jQuery 1.4 селектор проверяется, является ли он селектором id (например, ваш # p1 ).

  • Если это действительно так, вызывается document.getElementId (...) , и результат помещается в служебный объект jQuery и возвращается.
  • Если это что-то иное, jQuery вызывает Sizzle , который затем делает все, что он делает, для поиска элементов. И, судя по первоисточнику, это довольно нетривиальная вещь.
1
ответ дан 2 September 2019 в 22:03
поделиться

Лучше всего протестировать!

Из этого простого теста:

  • Контент -

    Тест

  • 100 000 циклов
  • Версия: jQuery 1.4.2

  • $ ('# p1'). Find ('span' ); : 2601 мс

  • $ ('# p1 span'); : 1998 мс

Похоже, что единственный селектор в этом случае работает быстрее, поскольку вы не делаете столько вызовов через jQuery это имеет смысл.

Попробуйте здесь, посмотрите на свою консоль .


Если вы используете jQuery 1.3.2, вот эти результаты:

  • $ ('# p1'). Find ('span'); : 3225ms
  • $ ('# p1 span' ); : 2082 мс

Попробуйте с 1.3.2 здесь .

1
ответ дан 2 September 2019 в 22:03
поделиться

В вашем случае, возможно, №1 быстрее, чем №2, но в зависимости от того, сколько итераций и сколько элементов нужно искать, №2 вполне может быть быстрее, чем №1 в других сценариях.

Например: я бы предположил, что если бы у вас было 3 элемента span и никаких других элементов в # p1 , то №1 был бы быстрее, чем №2, так как find не пытается сделать как можно больше сопоставления CSS. Но если бы у вас было 1000 элементов span , а также 2000 других элементов в # p1 , держу пари, что №2 будет быстрее, так как ему не нужно повторять каждый элемент дважды.

0
ответ дан 2 September 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: