Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Селектор первого потомка (https://javascript.ru/forum/misc/24296-selektor-pervogo-potomka.html)

FINoM 25.12.2011 20:16

Цитата:

Сообщение от Nekromancer
Никто не говорил, что селекторами быстро.

Встроенные функции, как правило, быстрее циклов.
Цитата:

Сообщение от Nekromancer
Эт вы в jQuery понабрались.

А причем здесь jQuery?

Nekromancer 25.12.2011 20:28

Цитата:

Сообщение от FINoM
Встроенные функции, как правило, быстрее циклов.

Неужели, а цикл типо не встроенный? Цикл например быстрее forEach. Я конечно понимаю о чём вы говорите, но правильно то нужно выражаться. Да и что за привычка приводить всё к одному, вы представляете как работает та функцию, о которой вы говорите?

Цитата:

Сообщение от FINoM
А причем здесь jQuery?

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

FINoM 25.12.2011 20:32

Цитата:

Сообщение от Nekromancer
Да и что за привычка приводить всё к одному, вы представляете как работает та функцию, о которой вы говорите?

Я так понимаю, что она работает так же, как и селектор в css, а как работают селекторы в css, имею представление.
Цитата:

Сообщение от Nekromancer
Девиз jQuery - "пиши меньше - делай больше". Туда же попадает и удобнее. Но все забывают написать о том, что работай медленнее.

Это — не сиззл, это — встроенная функция. Она точно была бы быстрее (при наличии селектора первого потомка), чем цикл + проверка каждого элемента на соответствие селектору.

Nekromancer 25.12.2011 20:38

Цитата:

Сообщение от FINoM
Я так понимаю, что она работает так же, как и селектор в css, а как работают селекторы в css, имею представление.

Ну вот и расскажите, почему оно быстрее тогда.

Цитата:

Сообщение от FINoM
Это — не сиззл, это — встроенная функция. Она точно была бы быстрее (при наличии селектора первого потомка), чем цикл + проверка каждого элемента на соответствие селектору.

Ну сделайте бенчмарк, посмотрим :) Хотя через тот способ, что вы предложили в начале, через id. И кстати, как jQuery не причём, если вы пытаетесь воспользоваться селектором из jQuery, в селекторах CSS. В css так писать нельзя:
> div {
/* ... */
}

FINoM 25.12.2011 20:41

Цитата:

Сообщение от Nekromancer
Ну сделайте бенчмарк, посмотрим

Ок, попробую.

FINoM 26.12.2011 03:44

Сделал бенчмарк при 20 дивах, каком-то количестве других элементов, 10000 итерациях. Селекторы быстрее в 17 раз. Может быть можно оптимизировать выборку по childNodes, но, уверен, это не придаст существенного увеличения скорости.

Бенчмарк без присваивания результатов выборки:
http://jsfiddle.net/finom/RDV7g/6/
selector: 189ms
childNodes: 3246ms

Бенчмарк с присваиванием:
http://jsfiddle.net/finom/LBU4W/1/
selector: 188ms
childNodes: 3170ms

FINoM 26.12.2011 03:46

Цитата:

Сообщение от Nekromancer
В css так писать нельзя

Я знаю, но думал может в querySelector добавили что-то типа @this.

FINoM 26.12.2011 03:47

Ах да, для запуска нужен хром и консоль.

FINoM 26.12.2011 03:57

А вот тест с поиском по атрибуту:
<div data-id="main1234567">...</div>

div.querySelectorAll('[data-id="main1234567"] > div');

http://jsfiddle.net/finom/LBU4W/2/
Результат тот же.

Nekromancer 26.12.2011 04:09

http://jsfiddle.net/RDV7g/7/
Firefox:
selector: 442ms
childNodes: 654ms
Chrome:
selector: 689ms
childNodes: 1173ms

http://jsfiddle.net/RDV7g/8/
Firefox:
childNodes: 302ms
selector: 451ms
Chrome:
childNodes: 373ms
selector: 681ms

Давайте не усложнять код :)


Часовой пояс GMT +3, время: 21:37.