Скорее людям нужны возможности фреймворка, чем быстрота. Поэтому Peppy и подобные будут мало востребованы, так как мало плагинов, а значит и быстрого наращивания функциональности. Мне кажется авторам, которые ведут исследования в областях ускорения выбора элементов и т.д. лучше направить свои усилия на ускорение распространенных фреймворков(Prototype, jQuery и т.д.).
может быть. Я вот лично склоняюсь к тому мнению, что на рынке должно быть разнообразие: хочется готовый фремворк — используй jQuery, YUI, Prototype или Mootools. Хочешь чего-то более базового и быстрого (например, для крупного портала или внутристудийных разработок) — собери систему «по кирпичикам». Чтобы это не развалилось, когда захудалый склад станет небоскребом (видел пару таких примеров, где спасет полный снос текущей клиентской архитектуры).
НЕ согласен. У меня дома (1,6ГГц, IE6) хабр (да и многие другие проекты на jQuery) сильно притормаживает при открытии, а тут, глядишь, пошутсрее могли бы бегать :)
да, спасибо, есть еще пара мест для оптимизации — типа все, что можно, закэшировать.
И по поводу регулярки еще не смотрел, какая реализация быстрее. Да еще и в каких браузерах :)
Не будет: программисту легче указать, какой запрос делать без кэширования (точнее, с его сбросом — чтобы пересчитать динамику), чем пересчитывать кэш на каждый чих…
По поводу ajax — это же мини-ядро :) Сюда еще методы изменения узлов нужны, ajax, события, таймеры, массивы и проч…
1. split может принимать на вход регулярку.
2. как быть в случае, если нужно выбрать элемент из поддерева?
3. как выбрать, например, все чекбоксы?
4. код не расширяем, не обманывай себя. css2 сюда фиг добавишь
5. если пользователю потребуется закэшировать — он просто создаст локальную переменную — это на порядок быстрее любых ухищрений с селекторами и удобнее их копипаста.
6. почему нет кэширования откомпилированной версии селектора? ах, у тебя же нет компиляции… а в base2 — есть.
1. Спасибо. Да, тут надо проверить, что быстрее — split c регуляркой или replace с функцией.
2. Принимать поддерево в качество параметра можно. Хорошее замечание.
3. CSS2 — да, стоит добавить (выбор по атрибутам и проч.)
4. В данный момент не расширяем (будет точно сыпаться на > ). Но все можно переписать с нуля :)
5. Каждый раз кэшировать? Не проще ли выбирать элемент и не думать о том, закэширован он уже где-то или нет? Кэширование будет обламываться только в случае изменения дерева. Если у нас есть ключевые узлы — да, мы можем их закэшировать. А можем и просто выбирать
6. Что такое «откомпилированная версия»? Чем она отличается от строки и набора узлов?
А насчет «не того места» :) Выложу, наверное, в скором будущем анализ крупной системы на Mootools — там полетела именно сборка мусора и выбор элементов. И терялось на этом все 2-3 секунды в IE при открытии каждой страницы
6. тем, что «откомпилированный селектор» — это функция, максимально эффективно реализующая поиск элементов по заданному селектору.
7. конечно, код написанный через задницу проще оптимизировать в одном месте, чем переписывать во многих =) но если код пишется по уму — от «оптимизаций» в селекторах только вред.
хмм, наверное, дерево выбора самой быстрой функции для заданного селектора и есть его «компиляция». Просто с понятием не сталкивался (в частности, если #id задан — то сразу берется document.getElementById, и ничего дальше не предпринимается). Я на это и ориентируюсь. Просто сейчас не самая оптимальная реализация предложена.
7. Как показывает практика, обычно «пишется по уму» другой код, который основан на этих самых селекторах. А когда оказывается, что тормозит ядро, а чтобы его переписать, надо выкинуть 100Кб чужого кода… No comments :)
у тебя парсинг селектора происходит при каждом запросе (кроме случаев попадания в кэш). в то время как результат этого парсинга можно закэшировать намертво.
7. это всё от мании реализовывать именно css селекторы. получается медленно и громоздко. у меня где-то валялась реализация не-цсс-селекторов, ориентированная именно на яваскрипт, с компиляцией, модульностью маленьким размером и тп… могу выложить, если интересно.
функция jpath принимает на вход селектор и возвращает функцию, которая по переданному массиву ( по умолчанию — [document] ) строит новый массив.
там реализованы следующие субселекторы:
* свойство каждого объекта по имени: jpath(' .nodeName ')( document.images )
* элементы по идентификатору из каждого поддерева в массиве: jpath(' #anyId ')([ top, self ])
* элементы-потомки по имени тэга: jpath(' %p ')()
* дочерние элементы с опциональной фильтрацией по имени узла: jpath(' /td ')()
* фильтрация списка по имени класса: jpath(' :favorited ')( elements )
* фильтрация списка по jpath-селектору,
* фильтрация списка по значению: jpath(' [ .checked =«true» ] ')( checkboxes )
Интересное начинание.
Лично мне, правда, идея сильно напоминает base2, но, тем не менее, автор прав — от конкуренции и обилия инструментов все только выиграют. Да и мини-ядро в больших приложениях также лучше фреймворка.
боюсь, время на запрос будет зависеть от специфики библиотеки. Т.е. самое быстрое сейчас — это концепция. Все остальное — просто примочки, которые ее чуть-чуть тюнят.
Это я к тому, что ты написал: «В ближайшее время я планирую провести ряд исследований...»! Если будет интерес, посчитай и этот параметр. Для общей оценки он важен, я думаю.
Забыл описание для ленивых:
«This is a new pure-JavaScript CSS selector engine that I'm working on.
Comes in at roughly 4x faster in Firefox 3, 3x faster in Opera 9, 1.5x faster in Safari 3 than the other major
JavaScript libraries. It's completely standalone (no library dependencies) and clocks in at 4KB.
Currently this engine is expected to become the new default selector engine of jQuery, MochiKit, Prototype, and Dojo»
возник вопрос, что предпочтительнее выигрыш в скорости на 10-20% или возможность использовать CSS2- и CSS3-селекторы?
лично для меня предпочтительнее второе, поэтому я жду обновления YASS, которое бы реализовало такую поддержку :)
Ты прав брат, но imho многие ждут обратного, в плане что бы уже существующие мйнстримовые фреймворки ускорялись)) а я так вообще молюсь что окгда ибудь вс ебраузеры будут поддерживать нативные css3 селекторы
может быть :) причем в наиболее быстрых браузерах — Safari, Opera, Chrome: именно в них элементарные операции «отъедают» меньше, а DOM сильно не пооптимизируешь :)
да, это понятно. Поэтому тут даже не разы интереснее, а сам факт быстроты — его уж не скроешь никаким округлением. А большое число тестов позволяет свести статистическую ошибку к минимуму.
Про 0-0-0-0 я вообще молчу. Тут даже сравнивать не с чем — просто быстрее, и все :)
Yet Another cSS selector = YASS