M>>Да. Для достижения той же функциональности мне придется написать столько же (если не больше), сколько во всем jQuery, кода ручками, если я хочу получить такую же функциональность.
Z>LOL. Кому нужна такая же точно функциональность в полном объёме? Покажи мне всего один сайт, который использует ВСЮ функциональность jQuery разом. А если всё-таки кому-то и нужен гипер-мега-важный-яваскрипт-актив, то тем более стоит писать своё.
90% функциональности jQuery указана в статье. Мы, например, ее всю используем. За 20KB исходников мы получили невероятно гибкий и удобный в использовании инструмент, покрывающий 100% наших нужд.
M>>Потому что jQuery — это фреймворк, который действительно упрощает решение проблем. Ты же не будешь спорить с тем, что $('div.items :nth(odd)') проще, чем 5-10 килобайтов кода, пытающегося достигнуть той же функциональности?
Z>Конечно буду, ты почему-то всё время демонстрируешь какой-то отдельно взятый левый вызов, хитро обзывая это простым кодом. This is передёргивание.
Ни в коем случае не передергивание. Я описываю фреймворк. С его использованием задачи решаются проще, чем написание того же ручками с нуля.
Z>Почему не пишешь ниже код всей т.н. фабрики рядом? А весь остальной код, что будет участвовать в решении задачи? Посмотри в профайлере, кто работает и рядышком их, рядышком, это и есть код, который можно справедливо противопоставлять 'чистому' javascript.
Зачем? Любой фреймворк — это всегда overhead. Цель люого фреймворка — упростить разработку, спрятав "чистый" код от разработчика. Кому надо, посмотрит в код фреймворка, благо в jQuery его не так уж и много. Заметь, что если ты будешь реализовывать
ту же функциональность на чистом JS — то есть настолько же гибкую, легкую и т.п., то все равно ты придешь к тому же, если не большему, количеству кода и вызовов.
Ключевое здесь — гибкое и легкое. ЧТобы не пришлось для каждой отдельной страницы писать тонны кода такого типа:
// jQuery
$('a.ajax');
// аналог
var links = getElementsByTagName('a');
var selectedLinks = [];
for(i = 0; i < links.length; i++)
{
// split потому что может быть class="ajax links other_class"
elemClasses = links[i].className.split(/\s+/);
if(inArray(elemClasses, "ajax") > -1)
{
selectedLinks.push(links[i]);
}
}
// функция взята из jQuery
function inArray(a, и)
{
for ( var i = 0, al = a.length; i < al; i++ )
if ( a[i] == b )
return i;
return -1;
}
При этом "ручками" мы теряем гибкость. Как только мы добавляем в код гибкость, мы получаем что? Правильно — jQuery, prototype.js, mochikit, dojo или какую иную библиотеку.
Что произойдет, когда "a.ajax" превратится в "#ajax a"?
M>>Еще раз повторю — вызовы функций — это не самая большая проблема в jQuery. Они занимают хорошо, если 1/10 часть от всего другого на странице.
Z>Ну, значит, ещё хуже дела обстоят, чем я думал.
Рассказываю саму большую проблему jQuery.
http://dev.jquery.com/~john/speed/
На вырожденных запросах типа $('body > div.dialog div:nth-child(even)') выборка может идти достаточно долго. Хотя на новых версиях в тесте эта выборка длится умопомрачительное время — 34-35
тысячных секунды. Это быстрее, чем мы моргаем (один "морг" — это порядка 200-250 миллисекунд).
M>>Попрошу привести мне, например, реализацию следующего кода на чистом JS
M>>Покажи мне JS для показа тултипа
Z>Беспроигрышная позиция — иди, Zeroglif, пиши тултипы и прочее, а я буду сидеть и оценивать, не напишешь — не доказал. Мне недосуг, написался уже выше головы, да и чего тут кодить, если и ёжику понятно, код отдельно взятой задачи всегда будет проще/адекватнее, чем весь код jQuery вместе взятый
Нет такого понятия, как "отдельно взятая задача". Есть такое понятие, как "отдельно взятый проект". Прикажешь для каждой страницы писатьотдельно ручками с нуля? Это ж сколько кода ты понапишешь? Намного больше, чем 20 килобайт. И намного менее гибкого. И намного менее "reusable" (ключевое слово, кстати).
Тот же tooltip. Я не зря попросил его написать. Потому что изначально было
В результате таких вот "рекламных кампаний в массы о простоте" фреймворки начинают пользовать почём зря, тултипчики показать, раскрасить чего и т.п., то есть там, где 10-20-30 строк понятного кода были бы уже достаточным (идеальным) решением.
Я привел пример тултипа, написанного с помощью jQuery. Пожалуйста, вот "20-30 строчек" с похожей функциональностью:
http://www.walterzorn.com/tooltip/tooltip_e.htm 36.8КБ
jQuery +
предложенный мной тултип — 29.7КБ. Причем из них 20 — это jQuery, которая помимо помощи в показе тултипа позволяет мне еще много чего.
Z>и прекратите уже, наконец, хитро популизировать jQuery, выдавая вызовы неких функций за весь его код, это вводит в заблуждение ньюбов. Почитал туториалы, "New JavaScript", "magic сhaining", дичь какая-то... Если и сравнивать, так библиотеку против библиотеки, где более-менее равная функциональность, это полезно для профи, делающего выбор. Отдельные же задачи всегда выиграют по всем статьям, или говоря лозунгами — "Чистый javascript рулит!"...
См. выше про тултипы. Рулит не чистый javascript, а библиотеки, позволяющие быстро и эффективно достигать функциональности, которые с помощью чистого JS достижимы с трудом. Особенно для ньюбов.
Покажи мне ньюба, который сможет без подсказки написать приведенный в самом начале аналог $('a.ajax'). Или ньюба, который сможет написать кроссбраузерный Ajax. А если делать его грамотно, то меньше кода, чем
здесь особо и не напишешь. Ты готов весь этот код писать сам, ручками? Я — нет. Мне достаточно того, что он есть в jQuery, и я им могу пользоваться.
M>>Да, вызовов этих функций будет много. Но. Разве их будет меньше, если мы реализуем то же на "чистом" JS?
Z>Взгляни ещё раз на свою статью, где пример раскраски таблицы, что уж может быть проще. Неужели ты никогда не открывал страницы, где типа 2-3-4 красивых фишечки, и вся эта ерундистика стоит аж на prototype.js, это сделали люди, у которых a)нет времени; б)нет знаний; c)нет сил отказаться от лапши, что так проще...
Z>p.s. prototype.js привёл просто как типичный пример бездумного использования популярного фреймворка
Ну так это — проблема тех, кто его так использует. Тот же jQuery можно с легкостью использовать на страницах с суммарным объемом (картинки+css+сама страница) от 15-20КБ и выше.
Кстати. Насчет раскраски таблицы. У нас в проекте есть страница, где таблица раскрашивается с помощью jQuery. Знаешь, почему? Потому что jQuery браузером кэшируется и потом сервером не дергается, а для каждого ряда передавать class="even" мы посчитали накладным. Тем более, что у нас не столько раскрашивается, сколько вот:
http://dmitriid.com/files/rsdn/jquery/table.html
Почему? ПОтому что jQuery закэшировано, и браузер ее все равно из кэша поднимает. Код на подсветку рядов в таблице занимает 229 вызовов за гигантское время в 14 миллисекунд — все равно быстрее, чем я могу моргнуть.