Показать сообщение отдельно
  #1 (permalink)  
Старый 28.12.2011, 04:35
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Прототип библиотеки jNext
Мне нравится jQuery. Нравится из-за того, с ней я могу сделать почти всё, не прибегая к нативным средствам браузера, не трахаясь с кроссбраузерностью. Но мне не нравится одно: её пихают куда ни попадя, даже в мобильные сайты. Огромная куча кода для поддержки кроссбраузерности инициируется каждый раз, когда открываешь страничку на мобильном. Анимации в jQuery сделаны старым дедовским способом: с помощью свойства style. Кроме этого, я полностью уверен в том, что в недалеком будущем (лет 5—10) она будет казаться старым пердящим запорожцем. Даже сейчас, когда IE6 практически сдох, в коде библиотеки наблюдается его поддержка. Что будет потом, когда умрет IE8? Разработчики будут выковыривать ненужные вещи? Сомневаюсь.

Поэтому я рискнул начать делать библиотеку, очень похожую на jQuery, использующую встроенные фишки по максимуму. Вся выборка элементов происходит с помощью querySelectorAll и matchesSelector, анимации сделаны на CSS3, данные, данные присваиваются элементу с помощью dataset. В дальнейшем, будет реализована работа с классами через classList и т. д.

Почему я взял за пример jQuery? Потому что очень удобно было бы писать один код под те же мобилы, планшеты и полноценные компы, просто подключая ту или иную библиотеку. Скрипты на jNext будут совместимы с jQuery, но не наоборот. А потом, можно вообще забить на совместимость, предоставляя свои фишки с блекджеком и шлюхами. В будущем, если руки дойдут, напишу модуль, который определяет, может ли моя либа работать с данным браузером или нет и, исходя из этого, решать, какая библиотека будет задействована.

Для примера, приведу алгоритм работы одной из функци. Допустим это siblings.
1. Берем все элементы из текущей выборки и проделываем следующие вещи
2. Допустим node — текущий элемент
a) node.dataset.randomId = Math.random(); // допустим 0.1
б) node.parentNode.dataset.randomId = Math.random(); // допустим 0.2
3. Конструируем селектор, он у нас получится таким:
[data-random-id=0.2] > :not([data-random-id=0.1])
4. Применяем селектор к node.parentNode, конкатенируем полученный массив с массивом новой выборки
5. Удаляем .dataset.randomId из 2.а и 2.б
Так работает большинство функций выборок и, как показал один из холиваров, в которых я участвовал, достаточно быстро. По поводу сравнения скорости с выборкой на регулярках, думаю, спорить вообще смысла нет.

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

Чтоб не быть голословным, вот, очень простой пример: http://jsfiddle.net/finom/Yb2MH/
Вот код: http://dl.dropbox.com/u/13598455/jNext/jNext.js , в котором очень много не реализовано, что-то сделано не до конца (метод css вообще работает только на установку стилей). Это прототип, пользоваться нельзя ни в коем случае. Работает пока что только в хроме (может и в сафари) из-за вездесущих префиксов -webkit-.

На всякий случай: не нужно здесь писать, что jQuery — говно. Только по коду, пожалуйста. С холиварами в оффтоп и не забудьте дать ссылку.

Последний раз редактировалось FINoM, 10.01.2013 в 16:39.
Ответить с цитированием