Введение

Практически любой читатель сейчас подумает о том, что это какая-то странная шутка — заменять самую популярную, полезную и необходимую библиотеку на какую-то альтернативу, даже не полную альтернативу, а её малую часть.

Да, пожалуй, в большинстве своём, это похоже на правду, но тут есть некоторая неувязочка. Суть её заключается в том, что некоторое количество разработчиков тащит за своим проектом jQuery или его полную альтернативу Zepto ради того, чтобы было удобно работать с DOM. Речь сейчас идёт о базовом функционале, то есть о выборке элементов, обработчиках событий, работе с атрибутами селекторов и прочих плюшках, которые предлагают такого рода библиотеки.

Странные люди, да?

Хотя, при принятии сложного решения типа: jQuery, кастомная сборка или Zepto, у меня всегда припасена отмазка: «Сегодня — DOM, а завтра уже расширение объектов, AJAX, анимация и прочее, прочее, прочее...». На самом же деле, это не лучшая из практик. Нужно исправляться, и исправляться как можно скорее.

Конечно же, можно рассматривать jQuery и Zepto как конструктор и добавлять только те модули, что пригодятся нам в работе, но тут играет свою роль другая проблема — лень. В таком случае, получается, что каждое обновление библиотеки нужно будет пересобирать свою сборку или же обновлять её с каким-то интервалом.

cash

Основная задача cash состоит в том, чтобы удовлетворить потребность малых проектов в уже привычном jQuery, и при этом сохранить свой небольшой размер. На данный момент, синтаксис cash является полным аналогом jQuery (Zepto), хотя такой цели перед собой разработчики не ставят. Сделано это для того, чтобы не тратить время на усвоение нового синтаксиса.

Возможности

В версии 1.0.0 имеются все самые основные и, как мне кажется, самые используемые возможности. Ниже представлен не весь список методов, которые предоставляет эта библиотека, а лишь те, что наиболее востребованы для работы с DOM. Советую обратить внимание на документацию, так как существуют некоторые разногласия с документацией jQuery или Zepto.

  • $()
  • $.extend
  • .each()
  • .attr()
  • .addClass()
  • .hasClass()
  • .removeClass()
  • .removeAttr()
  • .css()
  • .on()
  • .off()
  • .trigger()
  • .ready()
  • .html()
  • .text()
  • .val()

Производительность

Производительность у всех трёх решений (cash, jQuery, Zepto) колеблется на одном уровне, если судить по тестам представленным на jsperf. Результаты сильно зависят от браузера.

Тем не менее, стоит сказать, что из результатов можно сделать неутешительные выводы: в большинстве тестов Zepto и jQuery быстрее cash, причём до 10%. У меня нет желания лезть в исходники этих библиотек и докапываться до истины, поэтому, если вам такая тема интересна и близка, то я бы с удовольствием почитал ваши статьи или комментарии.

Производительность будет обсуждаться более детально в выводе, так как несёт сугубо поверхностный характер.

Поддержка браузерами

Скорее всего, на ближайшую вечность, библиотека cash будет поддерживать следующие версии браузеров:

  • IE9+
  • Chrome 34+
  • Safari 7+
  • Firefox 28+
  • Opera 23+
  • iOS 7+ Safari
  • Android Chrome 34+
  • Android Browser 4+

Автор позиционирует своё детище как небольшую альтернативу jQuery для современных браузеров, поэтому можно считать, что всё отвечает потребностям нашего времени. Если же зайти с другой стороны, то не всё так радужно. Для сравнения, приведу поддержу браузеров библиотекой Zepto:

  • Internet Explorer 10+ (Windows, Windows Phone)
  • Chrome 30+ (Windows, Mac, Android, iOS, Linux, Chrome OS)
  • Safari 6+ (Mac)
  • Firefox 24+ (Windows, Mac, Android, Linux, Firefox OS)
  • iOS 5+ Safari
  • Android 2.3+ Browser

И, конечно же, батькой библиотек jQuery 2.x:

  • IE 9+
  • Chrome (Current - 1) or Current
  • Firefox (Current - 1) or Current
  • Safari 5.1+
  • Opera 12.1x, Opera (Current - 1) or Current
  • iOS 6.1+ Safari
  • Android 2.3, 4.0+

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

Для кого подходит?

Во-первых, стоит отметить тех людей, о которых речь шла в самом начале статьи, то есть большинство. Напомню, что таким людям нужен базовый функционал библиотеки jQuery и лень использовать кастомную сборку.

Во-вторых, это может быть интересно тем людям, что принципиально не используют jQuery или Zepto в виду их громоздкости и лишнего функционала, который им, опять же, лень отсеять путём кастомизации.

Для кого не подходит?

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

Второй причиной может стать отсутствие необходимого функционала, который есть в jQuery или Zepto. На самом же деле, это не причина, а особенность этой библиотеки — её идеология и задача.

Помимо прочего, такая библиотека не подойдёт тем, кто не может сам написать метод .toggleClass(), ибо здесь его попросту нет.

Выводы

Постарайтесь оценить необходимый функционал до принятия решения об использовании jQuery, Zepto или cash. Конечно, если расценивать эти библиотеки как швейцарский нож, у которого полный багаж возможностей на все случаи жизни, то можно и не оценивать — безоговорочная победа первых двух. Однако, если же для вас есть разница между 80КБ и 8КБ, а также представленный в cash функционал покрывает все ваши потребности, то, возможно, стоит задуматься.

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

Хотелось бы ещё отметить, что я не выношу проблему скорости этой библиотеки в её, скажем так, минусы. На самом деле, соглашаясь с мыслью об использовании jQuery, Zepto, cash или прочих библиотек, в итоге мы имеем снижение производительности. Да, это присуще всем библиотекам, но взамен они предлагают нечто иное — удобство и простоту.

На реальных проектах, где работа с DOM ведётся не так продуктивно, как, допустим, в средних или крупных проектах, разница будет вовсе не важна для пользователей и практически не заметна для разработчика. В таких случаях можно пренебречь медлительностью библиотек и расценивать их задумчивость как погрешность. Если же у вас довольно крупный проект, то думать о cash нужно лишь в случае просто неимоверной лени и нехватки сил на кастомную сборку jQuery или Zepto. Несомненно, это так, если доверять тестам производительности с jsperf.

Кстати, у себя я использую релизную версию Zepto и менять её на cash пока что не собираюсь. Да, да, я написал эту статью про инструмент, которым на этом блоге я пользоваться пока что не хочу. Мало того, я подключил Zepto только ради .data() и .toggleClass(). Мой злодейский план, заключающийся в продолжительной загрузке страницы и траты вашего трафика работает с самого основания этого блога :)

На самом же деле, нет никаких препятствий для использования cash на малых и средних проектах. Да, это не сверхскоростное решение, как у ванильного JavaScript, но и неплохой инструмент, привносящий привычный для большинства jQuery синтаксис и удобство в ваш код.

Если же дело наконец-то дойдёт до редизайна блога, то я обязательно подумаю над выбором одной из этих библиотек.

Ссылки

Так увлёкся рассуждениями на тему производительности библиотек, что практически забыл оставить ссылку на саму библиотеку cash. Исправим это:

А ещё, послушайте новый подкаст от Sorax'a, в котором затронуты некоторые интересные вопросы. Немедленно :)