JQuery родительский потомок селектор - PullRequest
1 голос
/ 18 августа 2010

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

  1. $('#p1').find('span');
  2. $('#p1 span');

Ответы [ 3 ]

1 голос
/ 18 августа 2010

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

  • Если это действительно так, вызывается document.getElementId(...), а результат переносится в служебный объект jQuery и возвращается.
  • Если это что-то иное, jQuery вызывает Sizzle , который затем делает все возможное, чтобы найти элементы. И, судя по источнику, это довольно нетривиальный материал.
1 голос
/ 18 августа 2010

Лучший способ - это проверить!

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

  • Содержимое - ​<p id="p1"><span>Test</span></p>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
  • Цикл 100 000 раз
  • Версия: jQuery 1.4.2

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

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

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

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


В CAE вы находитесь на JQuery 1.3.2 вот эти результаты:

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

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

0 голосов
/ 18 августа 2010

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

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

...