Релиз версии ядра 2.1.7. После написания предыдущей статьи про YASS я понял, что забыл протестировать те 7 селекторов, на которых заваливается YASS, на Карбоне в браузерах без нативной поддержки Selectors API (Firefox 2, Opera 9.23).
И с ужасом обнаружил, что Карбон не проходит вот эти 2 селектора:
* > :nth-child(2n+1)
p:nth-child(even) > a[href^=http]
После нескольких часов разбирательств в коде понял, что Карбон неправильно обрабатывал строку с селектором, если в той одновременно был какой-либо комбинатор (>, +, ~) и псевдо-класс :nth-child(an+b), из-за чего мой алгоритм считал знак “+” в :nth-child() ещё одним комбинатором.
Ошибки были исправлены путём переписывания некоторых регулярных выражений, использующихся в ядре.
Кроме баг-фиксов, в новой версии полностью переписан алгоритм обработки того же :nth-child(), благодаря чему в старых браузерах он теперь обрабатывается даже быстрее, чем в jQuery!
На каникулах, возможно, выпущу версию 2.1.8, в которой надеюсь наконец избавиться от тормозов текущей реализации обработки комбинаторов (>100мс. в Firefox 2) и начну потихоньку обдумывать планы на следующую ветку версий 2.2.x.
