Pull to refresh

Версия 0.2.4: больше, лучше, быстрее

JavaScript
Много нового и просто хорошего:

  • Поддержка части CSS2/3.
  • Ускорение в 2 раза: быстрее последних Sizzle и Peppy.
  • Размер кода (min.gz): 1066 байтов.
  • Google Code SVN: code.google.com/p/yeasss .
  • Дизайн для yass.webo.in .


Спасибо всем, кто откликнулся и так или иначе посодействовал развитию проекта. Обязательно найду время и выложу ссылки на всех героев.

Теперь о главном: удалось значительно улучшить производительность и добавить поддержку селекторов [name=value] (в единственном числе) и :first-child, :last-child, etc (в единственном числе). Код был очень сильно отрефакторен. В частности, все простейшие вызовы была перенесены в ассоциативные массивы (для тега, класса и идентификатора).

Теперь можно оперировать примерно так:
a.link[class=menu]
div p:first-child
body table form:only-child
form input[type=checkbox]:checked


Основная функция была разбита на три — это существенно ускорило общую скорость. Видимо, при вызове метода создается его локальная версия, время на ее создание пропорционально сложности функции (фактически, числу элементарных операций). Поэтому оказалось, что небольшие функции, вызывающие друг друга работают быстрее одной большой.

Пока поддержка полностью CSS3 не планируется (имхо, уже сейчас можно выбрать, практически, любой элемент). Но рассматриваю такую возможность.

Список всех улучшений достаточно велик, его можно посмотреть в SVN: code.google.com/p/yeasss. От себя же могу добавить, что кроме вышеописанных ухищрений были также заменены вызовы arguments[] на обычные именованные параметры функции. Также кэширование (как достаточно «увесистая» операция при большом объеме дерева) была перемещена прямо на возвращаемое значение: сейчас присвоение происходит в самом return.

Скачать последние версии:
Полная: yass.webo.in/yass.0.2.4.js
Минимизированная: yass.webo.in/yass.0.2.4.min.js

На данный момент общественность в том или ином виде требует доработки визуальных эффектов и функциональности. Но я лично в больших сомнениях, по какому пути пойти в этом направлении: расширение создаваемого объекта (обертки) или добавление свойств у глобального window._. Если у кого-то будут соображения — поделитесь, пожалуйста.

P.S. для того, чтобы как-то зафиксировать ускорение пришлось сильно замедлить тесты SlickSpeed на сайте: для обычных библиотек они работают крайне медленно, не рекомендуется выбирать их при сравнении скорости.

P.P.S. тесты SlickSpeed сами вносят достаточную погрешность в вычисления (как в квантовой физике: чтобы измерить состояние, невозможно его не изменить), поэтому я рассматриваю их только как ориентировочные. В частности, в Opera они дают большой разброс.
Tags:yassскорость загрузкипроизводительностьjavascriptcss selectorsоптимизация
Hubs: JavaScript
Total votes 27: ↑25 and ↓2+23
Views369

Popular right now

Top of the last 24 hours