Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   "Нормальность" скорости выборки элементов. (https://javascript.ru/forum/misc/34424-normalnost-skorosti-vyborki-ehlementov.html)

viktorina 04.01.2013 18:37

"Нормальность" скорости выборки элементов.
 
У меня скрипт, который ищет элементы на странице.
Так вот чтобы найти элементы приходится искать все элементы
getElementsByTag("*")
Потом в цикле сравниваю с заданными в поиске требованиями.
Короче чтобы найти элемент затрачивается 20мс .
Я новичок и у меня где-то внутри ёкает, что это ужос как долго.
Долго ли это на самом деле или в большинстве случаев не играет решающей роли? Или таки скорость стоит на первом месте?
querySelectorAll работает быстрее, но в ie<8 не работает.

Deff 04.01.2013 19:26

viktorina,
1. Сколько элементов на странице и сколько из них выбирается ?
2. Каков смысл данной затеи ?
3. По какому селектору ищется ?

viktorina 04.01.2013 19:36

Элементов бывает до тысячи. Из них выбирается до 30.
Смысл в написании своего маленького фреймворка(). http://jru-framework.ru/ - этот. У меня была мечта создать отечественный фреймворк:), но знаний маловато. Сейчас решил всё же вернуться к романтике, но уже более серьёзно. Например слайды эти на нём написаны.
Ищется по любому селектору, хоть по присутствию слова или куска html в элементе.
Проблема именно в первом getelementByTag(*) и в первом перелистывании всех элементов. После первого отсева всё быстро.

Deff 04.01.2013 19:59

Цитата:

Сообщение от viktorina
Смысл в написании своего маленького фреймворка(). http://jru-framework.ru/ -

Ну в качестве имхо для тренировки и души - возможно,
А так - для слайдеров мало нерешенных задач,
простейший - подгрузка готового фреймворка по клику на элемент слайдера.

viktorina 04.01.2013 20:23

Но мой фреймворк делает всё быстро и просто, подгружает, перегружает, меняет стили и т.д.
У меня animate лучше чем jquery. проблема в скорости выборки. чтобы найти элемент 20мс надо, это же много?

Deff 04.01.2013 20:24

Цитата:

Сообщение от viktorina
20мс надо, это же много?

Если есть анимация - то нет, посколь минимальный цикл таймера порядка 13 мс

viktorina 04.01.2013 20:35

С анимацией всё в порядке. У меня сначала идёт выборка, до 20мс, потом анимация работает уже с выбранными элементами, во время анимации выборок нет.
При загрузке страницы все элементы, как правило уже собраны в переменных и ждут дискотеку:). Ну максимум при наведении мышки может понадобиться выборка, но пользователь эту задержку не заметит.
Да и вообще не заметно это время, просто сам подход мой не смущает? Перелистывать все элементы и искать сходства. Не заплюют гуру за такой подход? "Аж 20мс! Да гори ты в аду!" :)

dmitriymar 04.01.2013 20:43

viktorina,
90 % из написанного делает нативный http://javascript.ru/blog/subzey/que...orAll-praktike
и т.д
Цитата:

Все цепные функции запускаются двумя способами:event() и start()
бессмысленно, если слушатель нельзя отменить
и т.д и т.п..

Deff 04.01.2013 20:43

Цитата:

Сообщение от viktorina
Перелистывать все элементы и искать сходства. Не заплюют гуру за такой подход? "Аж 20мс!

Собственно кода нет, ап чем тогда можно полемику разводить...
Потом суть не в том шо апплюют, - эт не главное - суть в том чтоб на мысли навели!

DjDiablo 04.01.2013 20:56

Цитата:

Собственно кода нет, ап чем тогда можно полемику разводить..
+1

ЗЫ.
"Сейчас решил всё же вернуться к романтике" - пишешь как мальчик
viktorina - а по нику девочка :)

viktorina 04.01.2013 20:59

Цитата:

Сообщение от dmitriymar
бессмысленно, если слушатель нельзя отменить

Почему безсмысленно? Отмена слушателя - мелочь, мне кажется.

Цитата:

Сообщение от dmitriymar
90 % из написанного делает нативный

А как написать кроссбраузерную querySelectorAll ?

dmitriymar 04.01.2013 21:01

Цитата:

Сообщение от viktorina
Почему безсмысленно? Отмена слушателя - мелочь, мне кажется.

неправильно кажется.
Цитата:

Сообщение от viktorina
А как написать кроссбраузерную querySelectorAll ?

в статье по ссылке есть с каких браузеров поддерживается.
да и анимацией пора на сss3 переходить. не за горами тот день когда все остальные подходы, для подобных задач, морально устареют

viktorina 04.01.2013 21:04

Цитата:

Сообщение от DjDiablo
ЗЫ.
"Сейчас решил всё же вернуться к романтике" - пишешь как мальчик
viktorina - а по нику девочка

Я - парень, с бородой:), 30 лет, женат. Викторина - не от имени:). Когда-то надо было придумать ник, а по телику разыгрывали приз в викторине:).
Код в ссылке. да и вопрос не по коду, а по возможности сделать из querySelectorAll - кроссбраузерное что-нибудь. И про время я спрашивал. А по коду там всё просто, в цикле проверяются атрибуты и параметры.

viktorina 04.01.2013 21:05

Цитата:

Сообщение от dmitriymar
неправильно кажется.

Ну пока проблема не в этом.

dmitriymar 04.01.2013 21:08

Цитата:

Сообщение от viktorina
а по возможности сделать из querySelectorAll - кроссбраузерное что-нибудь.

Цитата:

Поддерживается всеми современными браузерами, Internet Explorer — начиная с версии 8.

моё мнение -только в целях саморазвития , а так обречён с ходу

viktorina 04.01.2013 21:09

Цитата:

Сообщение от dmitriymar
в статье по ссылке есть с каких браузеров поддерживается.

А толку? Эти знания не помогут заставить ie понимать эту функцию.

viktorina 04.01.2013 21:11

Цитата:

Сообщение от dmitriymar
то что мелочь -неправильно кажется.

Вопрос не стоит в том "чего не хватает в библиотеке?", вопрос стоит в скорости выборки, допустимо ли 20мс для поиска, как заставить ie6,7 понимать qSA? так как эта функция ищет 1мс.
Сейчас вопрос в выборке, а слушатели , их удаление, анимации потом.
Я застрял на этом qsA

Deff 04.01.2013 21:21

viktorina,
Цитата:

Сообщение от viktorina
Я застрял на этом qsA

В принципе для ИЕ скорость 20 - нормально
Второе: Если слайдер свой - можно контент разделить boundary и затем split(om) поделить и вставить его скриптом в нумерованный ID массив контент-блоков - поиск будет уже по известным id

viktorina 04.01.2013 21:31

Цитата:

Сообщение от Deff
можно контент разделить boundary и затем split(om) поделить и вставить его скриптом в нумерованный ID массив контент-блоков - поиск будет уже по известным id

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

dmitriymar 04.01.2013 22:01

Цитата:

Сообщение от viktorina
А как программист JQuery заставил работать без всех лишних манипуляций, у него работает везде и быстрее чем у всех выборка.

исходники джиквери открытые,в чём вопрос?

viktorina 04.01.2013 22:16

Цитата:

Сообщение от dmitriymar
исходники джиквери открытые,в чём вопрос?

Сегодня целый день изучаю и не могу найти, где и как он решает эту проблему. Плохо пока разбираюсь в чужих кодах такого уровня. Всякие любительские понимаю, а такие как JQ с трудом.
нужна функция типа
function fixQuerySellectorAll(query,context){

                return context.querySelectAll(query) || (...Что-то тут надо...)

}

Hoshinokoe 04.01.2013 22:44

viktorina,

Лучше сразу смотреть исходники Sizzle.js (это библиотека селекторов, которая используется в jquery).

P.S. Можете сравнить производительность этой библиотеки с вашей.

viktorina 05.01.2013 00:48

Тяжело вникнуть в суть происходящего внутри библиотек:(.
Обычно тяжело разобраться в подобных кодах? Или просто у меня опыта мало?

Deff 05.01.2013 01:06

viktorina,
Ну нужно дойти в учебнике до прототипов http://learn.javascript.ru/
С тренировкой ежели от нуля - полгода

dmitriymar 05.01.2013 01:17

Цитата:

Сообщение от Deff
С тренировкой ежели от нуля - полгода

??? полгода? ))) быстро слишком -прочитать можно, усвоить с нуля нет

viktorina 05.01.2013 01:28

Перешёл по ссылке и читаю.


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