Search
Write a publication
Pull to refresh

Версия 0.1.6

Reading time2 min
Views592
Спасибо всем.

Честно, не ожидал настолько позитивного отклика (некоторые даже кинулись внедрять библиотеку в свои проекты и всячески пропагандировать :). Для большей ясности поясню основные идеи:
  1. Это мини-ядро. Чтобы выбирать элементы DOM-дерева. На его основе (или дополнительно к нему) можно разрабатывать остальные модули. Но конкретно этот функционал дальше CSS-селекторов расширяться вряд ли будет. Идея ни разу не новая.
  2. Это самое быстрое мини-ядро. Каждая строчка тестируется и будет тестироваться на экстремальную производительность в большинстве случаев. Чтобы это можно было положить в основу большого проекта. Иначе все остальное не имеет смысла.
  3. Код открытый (MIT + GPL). Можно использовать где угодно (вроде даже без ссылок на авторство). Комментарии по улучшению приветствуются.


Немного по сути


О чем данный пост? Текущая версия (0.1.6) достаточно стабильно справляется с CSS1-селекторами. Хочется какого-то бета-тестирования, чтобы понять основные баги (на данный момент есть как минимум один спорный случай: когда DOM-методы и основные библиотеки выбирают разное количество элементовнапример, с неуникальностью выбираемых элементов).

Поднят отдельный хост для самой библиотеки и проверки скорости:
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 :)
Tags:
Hubs:
Total votes 34: ↑34 and ↓0+34
Comments26

Articles