Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > какой селектор быстрее?


Автор: fish9370 15.7.2013, 13:01
много использую jquery и хочу для себя узнать, какой селектор быстрее:

Код

alert($('.container .item').val())


или более уточненный

Код

alert($('.container .form .left-menu .item').val())



Автор: Arantir 15.7.2013, 13:28
Судя по всему - абсолютно без разницы http://jsperf.com/multi-vs-simple-selectors-test

Надо копошится во внутреннем устройстве селекторов, чтобы более уверенный ответ дать.

Автор: CruorVult 15.7.2013, 13:35
Этот
Код

document.querySelectorAll('.container .item')


Автор: Arantir 15.7.2013, 13:50
CruorVult, вот только на нем jQuery не поюзаешь. А если результат пихать в jQuery, то выходит медленнее, чем если сразу через jQuery 
http://jsperf.com/multi-vs-simple-selectors-test/3

Добавлено через 3 минуты и 48 секунд
Черт, а в Firefox наоборот : D
Правда разница ~1%

Автор: CruorVult 15.7.2013, 14:01
Arantir, это я к тому, что можно некоторые вещи и без jquery делать smile 

Автор: Arantir 15.7.2013, 14:14
Ну это уже из категории "все можно сделать на ассемблере... если жизни хватить" =)

Время - деньги. Из-за принципиальной разницы между серверным и клиентским приложением, зачастую, проблема ресурсозатрат клиентского приложения не столь критична. Удовлетворительный уровень называеться "не лагает" smile
По этому возможность более быстрой разработки перевешивает.

Автор: CruorVult 15.7.2013, 14:45
Arantir, да, ты прав, если на странице нужно делать относительно небольшие манипуляции с ДОМ-ом, лучше всего использовать jQuery с легким синтаксисом и кроссбраузерностью.
Но, если ТС спрашивает какой код быстрее работает, то, скорей всего, его интересует производительность. Производительность = native JS. В общем то и все.



Автор: fish9370 15.7.2013, 14:57
Цитата(Arantir @  15.7.2013,  13:28 Найти цитируемый пост)
Судя по всему - абсолютно без разницы http://jsperf.com/multi-vs-simple-selectors-testНадо копошится во внутреннем устройстве селекторов, чтобы более уверенный ответ дать.


мне кажется надо завернуть это в цикл, и множественно прогнать

Добавлено через 6 минут и 39 секунд


Цитата(CruorVult @  15.7.2013,  14:45 Найти цитируемый пост)
Arantir, да, ты прав, если на странице нужно делать относительно небольшие манипуляции с ДОМ-ом, лучше всего использовать jQuery с легким синтаксисом и кроссбраузерностью.Но, если ТС спрашивает какой код быстрее работает, то, скорей всего, его интересует производительность. Производительность = native JS. В общем то и все.


на самом деле код ведь не выполняется постоянно в цикле, он вешается в качестве обработчиков на некоторые события. навешивать обработчики беспорно удобнее с помощью jquery, селекторы в jquery сделаны по-человечески, если приписать сюда еще и кроссбраузерность, получается бомба.

меня интересует производительность селекторов именно в контексте jquery.

Автор: Arantir 15.7.2013, 17:03
Цитата(fish9370 @  15.7.2013,  13:57 Найти цитируемый пост)
мне кажется надо завернуть это в цикл, и множественно прогнать

Собственно, тот сайт с тестами именно это и делает.

Цитата(CruorVult @  15.7.2013,  13:45 Найти цитируемый пост)
Но, если ТС спрашивает какой код быстрее работает, то, скорей всего, его интересует производительность. Производительность = native JS. В общем то и все.
Цитата(fish9370 @  15.7.2013,  13:57 Найти цитируемый пост)
меня интересует производительность селекторов именно в контексте jquery.

Думаю ТС просто хочет найти баланс между удобством и производительностью. 
Чтобы и jQuery, но излишне не загрузить браузер.

Автор: fish9370 15.7.2013, 17:14
Цитата(Arantir @  15.7.2013,  17:03 Найти цитируемый пост)
Думаю ТС просто хочет найти баланс между удобством и производительностью. Чтобы и jQuery, но излишне не загрузить браузер.


верно.. smile

Автор: CruorVult 16.7.2013, 11:15
Цитата(fish9370 @  15.7.2013,  17:14 Найти цитируемый пост)
верно..  


Ну тогда, как ответил Arantir, разницы нету.

Можно конечно разобраться как работает движок селекторов(на разных браузерах) и добиться небольшой производительности на 10%, при этом воспользоваться jQuery и снизить производительность на 100%  smile 

Автор: Sanchezzz 18.7.2013, 21:12
Вроде на хабре была статья про селекторы и их скорость.
Если я не ошибаюсь то селектор по #id работает быстрей, особенно если они уникальны.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51e3c8d66ccc192d7e000002#findElement_E7045_51e8300a6ccc19745b001f8a_0

Автор: Arantir 18.7.2013, 22:07
Цитата(Sanchezzz @  18.7.2013,  20:12 Найти цитируемый пост)
Если я не ошибаюсь то селектор по #id работает быстрей

Насколько помню, все id складываются в хэш-таблицу при загрузке DOM.

Цитата(Sanchezzz @  18.7.2013,  20:12 Найти цитируемый пост)
особенно если они уникальны

особенно будет, когда они не уникальны  smile 
Они должны быть уникальными. Нетрудно заметить, что по одному ID будет выбран только первый элемент с этим ID, если их (вдруг) несколько.
Селекторы классов вторые по производительности. Наверное тоже складываются в коллекции какие-то при загрузке. А дальше уже идут, по видимому, ран-тайм селекторы.

Автор: krundetz 19.7.2013, 10:33
Цитата(Arantir @  18.7.2013,  22:07 Найти цитируемый пост)
 
Они должны быть уникальными. Нетрудно заметить, что по одному ID будет выбран только первый элемент с этим ID, если их (вдруг) несколько.

к сожалению, встречаются индивиды которые об этом забывают, а ты потом сидишь и думаешь почему правильно написанный код не правильно работает, а работает он не правильно так как поведение браузера при наличие нескольких элементов с одинаковым ID не всегда однозначно (((

Автор: Sanchezzz 19.7.2013, 15:57
Во нашел 
http://habrahabr.ru/post/111195/

Автор: akizelokro 23.7.2013, 16:45
По идее, первый селектор должен работать быстрее. 
Меньше условий для поиска.
Но это по идее. потому что реально будет всё зависеть от самой структуры html и его размера. 
Но первый вариант на одном и том же html должен работать, как иминимум, не медленнее. imho.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)