Селекторы: идентификатор против контекста - PullRequest
4 голосов
/ 05 августа 2010

Я использую jQuery.

Я много читал о производительности селектора и оптимизировал наше приложение AJAX. Я ищу, чтобы улучшить мою работу селектора. Я знаю все советы по производительности jquery. Я не нашел точного ответа на мой вопрос. Я использую почти все текущие советы по производительности jquery, и, тем не менее, мое приложение все еще сильно отстает.

Итак, для оптимизации я начинаю с селекторов.

Мой вопрос таков: происходит ли переход от контекста к цели по идентификатору быстрее, чем просто по цели? Я не могу сказать, большая разница.

Пример:

Есть

$('#childId', $higherElm);

быстрее, чем просто

$('#childId');

????

Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 05 августа 2010

Как видно из источника jQuery , $('#id') делает просто document.getElementById, а $('#id', context) делает $(context).find('#id'). Так что первое быстрее.

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

Выбор идентификатора - самый быстрый выбор, который вы можете сделать.

Добавление чего-либо еще только замедлит его.

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

Согласно этой статье быстрее иметь меньше прямых селекторов. #id лучше, чем #id #child, по крайней мере, в CSS ...

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

Не уверен, что синтаксис, который вы описали выше, был бы полезен, но на http://www.artzstudio.com/2009/04/jquery-performance-rules/ в правиле № 5 указано, что использование подзапросов быстрее (что имеет смысл) ... они демонстрируют это с помощью Синтаксис $ upperElm.find (), хотя.

В вашем примере - поскольку он отображается непосредственно на getElementById, который является вызовом нативной функции, - я не думаю, что вы увидите значительное улучшение. Однако селекторы, которые нацелены на наборы элементов (следовательно, циклические), вероятно, увидят некоторую, или большую, выгоду.

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

Когда вы выбираете по «id», контекст не имеет большого значения, потому что движок все равно будет вызывать getElementById(). Контекст семантически имеет значение, конечно, но эта проверка должна быть довольно быстрой. (Я полагаю, что в этом свете контекст должен быть немного медленнее , но вы не можете прекратить это делать, если он имеет реальное значение для ваших страниц.)

...