Сегодня выпускаю новую версию ядра 2.1.8. Релизом стала, как я и ожидал, вчерашняя сборка из репозитория. На данный момент, это самая лучшая версия ядра Карбона по соотношению скорость/стабильность.

Изменения по сравнению с версией 2.1.7:

  • Пофикшены проблемы с использованием псевдо-селекторов в :not() и :contains(), когда при использовании в них других псевдо-классов, например, div:not(:empty):nth-child(even), строка неправильно разбивалась на части, из-за чего возвращались не те элементы
  • Добавил во внутреннюю функцию getByTagAndClass() поддержку свойства all для лучшей поддержки IE
  • Пофиксил баг в новом алгоритме :nth-child
  • Немного переделал алгоритм обработки псевдо-класса :empty
  • Пофиксил недочёт псевдо-класса :not
  • Переделан кэш: теперь вместе с конечными элементами записывается уникальный номер элемента, в котором производился поиск
  • Добавлена поддержка псевдо-класса :nth-last-child
  • Добавлена функция find() для поиска элементов в текущем наборе элементов
  • Полностью переделан алгоритм обработки комбинаторов

Сравнение скорости работы по тесту SlickSpeed:

Браузер Carbon.JS 2.1.7 Carbon.JS 2.1.8 jQuery 1.4
Opera 9.27 8.404 7.215 164.736
Opera 9.64 4.096 4.107 97.717
Opera 10.1 3.344 3.386 22.724
Opera 10.5a 1.365 1.435 15.780
Firefox 2 306.737 9.295 250.235
Firefox 3 104.038 3.433 83.708
Firefox 3.5 2.196 1.984 29.819
Firefox 3.6 1.856 1.734 26.197
Chrome 4 0.379 0.500 12.066
Safari 4 0.829 0.930 12.406
IE 8 110.151 10.996 180.315

И если раньше я говорил, что jQuery быстрее работает в старых браузерах, хотя Carbon.JS обгонял и его, и Prototype в современных браузерах с поддержкой document.querySelectorAll(), то теперь я могу с уверенностью сказать: Carbon.JS Core работает быстрее всех остальных библиотек (ну да, кроме YASS, про который я уже писал) во всех браузерах! Ура, товарищи!

Версия 2.1.8 будет скорее всего последней в ветке 2.1.x. На очереди будет новая ветка 2.2.x, в которой я надеюсь пересмотреть свою модульную систему, в частности хочу оставить всего 5 из 6 полноценных модулей, а модуль UI разбить на отдельные плагины.

Но это будет позже, а пока надо заняться другими модулями, за которые я не брался уже больше четырёх месяцев. Также начну, наконец, наполнять раздел демок.