Спасибо всем.
Честно, не ожидал настолько позитивного отклика (некоторые даже кинулись внедрять библиотеку в свои проекты и всячески пропагандировать :). Для большей ясности поясню основные идеи:
О чем данный пост? Текущая версия (0.1.6) достаточно стабильно справляется с CSS1-селекторами. Хочется какого-то бета-тестирования, чтобы понять основные баги (на данный момент есть как минимум один спорный случай: когда DOM-методы и основные библиотеки выбирают разное количество элементовнапример, с неуникальностью выбираемых элементов).
Поднят отдельный хост для самой библиотеки и проверки скорости:
yass.webo.in
там же поднято тестовое окружение с большинством библиотек (спасибо lusever за содействие)
yass.webo.in/slickspeed

Конечно, это все CSS1. Но ради этого и задумывалось
Производительность увеличилась (по сравнению с 0.1) на: Fx3 (70%), Opera 9.6 (24%), IE7 (37%), Safari (13%). Основные сдвиги по производительности: 0.1 -> 0.1.1, 0.1.2 -> 0.1.4, 0.1.4 -> 0.1.6
Как только подключу SVN через code.google — выложу ссылку.
Все выложено по адресу: yass.webo.in
P.S. если у кого-то будут мысли по дизайну — welcome :)
Честно, не ожидал настолько позитивного отклика (некоторые даже кинулись внедрять библиотеку в свои проекты и всячески пропагандировать :). Для большей ясности поясню основные идеи:
- Это мини-ядро. Чтобы выбирать элементы DOM-дерева. На его основе (или дополнительно к нему) можно разрабатывать остальные модули. Но конкретно этот функционал дальше CSS-селекторов расширяться вряд ли будет. Идея ни разу не новая.
- Это самое быстрое мини-ядро. Каждая строчка тестируется и будет тестироваться на экстремальную производительность в большинстве случаев. Чтобы это можно было положить в основу большого проекта. Иначе все остальное не имеет смысла.
- Код открытый (MIT + GPL). Можно использовать где угодно (вроде даже без ссылок на авторство). Комментарии по улучшению приветствуются.
Немного по сути
О чем данный пост? Текущая версия (0.1.6) достаточно стабильно справляется с CSS1-селекторами. Хочется какого-то бета-тестирования, чтобы понять основные баги (
Поднят отдельный хост для самой библиотеки и проверки скорости:
yass.webo.in
там же поднято тестовое окружение с большинством библиотек (спасибо lusever за содействие)
yass.webo.in/slickspeed

Конечно, это все CSS1. Но ради этого и задумывалось
Список изменений:
- 0.1.1: уменьшено число операций перед взятием из кэша. Добавлены еще базовые случае (типа
form
) - 0.1.2:
replace
+split
для групп заменен наsplit
с регуляркой (спасибо tenshi), поправлены размеры массивов (чтобы пройти SlickSpeed) - 0.1.3: уменьшено число обращений к внутренним переменным (
_.nodes
,_.sets
), внедрена новая «жадная» регулярка (теперь ограничение на JS 1.5, спасибо GreLI). Добавлен новый параметр: корень поиска (вторым) — пока еще не везде, но для небазовых случаев. Запрет кэширования сдвинут на третий параметр. Самая медленная версия (разобраться бы, почему :) - 0.1.4: if-then-else выражения заменены на ||. Условия в while цикле заменены на проверку наличия соответствующих элементов. Пофикшен мелкий баг в Opera (введена проверка еще на nodeName). Вызов свойств вида '[]' заменен на '.' (спасибо, arty)
- 0.1.5: внедрено использование
getElementsByClassName
.document.all
заменен наdocument.getElementById
(последнее все-таки быстрее, или разницы нет). - 0.1.6:
getElementsByClassName
оставлен только перед общим случаем: в общем случае всегда по тэгу выбирается, а затем проверяется класс и идентификатор. Внедрена проверка перед регулярным выражением для#id
(наверное, стоит убрать после регулярки проверку на то же самое — это стоит проверить).
Производительность увеличилась (по сравнению с 0.1) на: Fx3 (70%), Opera 9.6 (24%), IE7 (37%), Safari (13%). Основные сдвиги по производительности: 0.1 -> 0.1.1, 0.1.2 -> 0.1.4, 0.1.4 -> 0.1.6
Как только подключу SVN через code.google — выложу ссылку.
Небольшое ToDo
- Внедрить проверку на аттрибуты (селекторы вида
[name=value]
,:first-child
и разные вариации) без потери производительности, чтобы приблизиться к CSS3 - Сделать и протестировать выборку из поддерева.
- Добавить очистку мусора для кэша (
cache
, по идее, должен хорошо так течь в IE). - Сделать что-то с уникальностью возвращаемых элементов (сейчас возвращается выборка, которой в может быть несколько одинаковых элементов)
Все выложено по адресу: yass.webo.in
P.S. если у кого-то будут мысли по дизайну — welcome :)