M>>Ну я Javascript-программист. Я увидел, что у мнея появился инструмент, который позволяет мне без геморроя решать огромное количество задач.
Z>Программирование на javascript — это геморрой? Понятно. Легче внедрять да инклюдить. Тот же копипаст, только вид сбоку. Без обид, это в философском смысле.
Повторю еще раз:
// 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 — это не геморрой. Код на чистом JS — это геморрой. Если я код на JS оберну в функцию/объект и засуну его в свой собственный фреймворк, то он перестанет быть "чистым JS". Он станет частью моего фреймворка.
M>>Зачем мне читать исходник? Исходник я читал два раза — когда дебагил Ajax + XML (оказалось, проблема не в jQuery, а на серваке была) и когда смотрел, как реализована jQuery.extend.
Z>Ага, то есть если даже ты не читал исходники, тогда чего знают о jQuery не-javascript-программисты? Выходит, что знают они, как чегой-то-там-куда-то вызвать...
Причем тут не-javascript-программисты? Да, jQuery иногда
предлагается и не-программистам. И что из этого? Я исходники jQuery благодаря разным спорам уже вдоль и поперек изучил, благо их там мало.
M>>Рассказываю по порядку. Это истина жизни, странно, что ее не все понимают.
Z>Истины жизни не бывает. На то она и жизнь.
В области разработки ПО быстро понимаешь, что истина только одна — велосипеды себя не оправдывают и не окупают.
M>>Не завоевывают именно из-за таких людей, которые готовы тратить уймы времени и писать тонны кода, когда можно в десятки раз увеличить свою производительность
Z>Да, ты прав, из-за нас, мы тратим время, пишем код, учим других писать код, бизнесу не учим, виноваты.
При чем тут бизнес? Еще раз повторю, с нуля многое писать интересно, пока технологию только изучаешь. Если ты действительно хороший программист и можешь себе это позволить, то можно написать самому себе фреймворк типа jQuery, mochkit или любого другого (как это сделали John Resig (jQuery), Jack Slocum (Ext) и другие). В любом другом случае написание своего собственного, но аналогичного, функционала себя не оправдывает.
M>>Посмотри на список сайтов, которые пользуются jQuery: http://docs.jquery.com/Sites_Using_jQuery По-моему, это — достаточный аргумент в пользу библиотеки.
Z>Достаточный? Посмотри на миллионы сайтов, где нет jQuery, но есть (ты не поверишь) javascript. Это достаточный аргумент, чтобы не использовать этот фреймворк? Или только вам открылось...
Из этих миллионов весьма немногие ухитряются уложиться в 20КБ да еще работать под всеми браузерами.
M>>Исходников там не так уж и много, их можно наискосок, не вдаваясь в детали, прочитать минут за 15, а то и меньше. Почитай, советую. Потом посмотри на тонны своего собственного кода и задайся вопросом: а почему у меня не так.
Z>Что ж ты мне всё на мои тонны намекаешь. Если кто-то не умеет писать "не тонны", от этого страдает и вынужден искать фреймворки — это его неотъемлемое право.
Хорошо. Не тонны. Можешь оценить, сколько времени у тебя уйдет на написание своего собственного фреймворка, по возможностям не уступающего jQuery. Да, это будет твой собственный фреймворк, в котором ты бдешь уверен в каждой строчке кода. Пока ты его будешь писать, я сдам свой проект и начну новый
M>>Более того, цитируюАвтор: Sinclair
Дата: 21.07.06
M>>И это — так. Пока ты на каждый чих пишешь 10-20-30 строк "чистого JS", мы уже написали весь необходимый функционал и продаем свой продукт
M>>Еще советую здесь: http://www.rsdn.ru/Forum/?mid=2027495Автор: Sinclair
Дата: 27.07.06
Z>Так это бизнес-форум, не знал. Тогда это из серии, эй, твой код хреновый, избыточный и не в кассу. Ну и что, зато я его за минуту подцепил и продаю, продаю, продаю...
Разработка ПО — это всегда бизнес, если только проект не пишется для себя и явно будет некоммерческим. Еще раз повторю:
— Предположим, ты работаешь в какой-нибудь компании. Зарплата у тебя — 1000 долларов в месяц.
— Ты решил не брать jQuery, а написать свой, похожий по функционалу, фреймворк
— Во главу угла ты ставишь скорость, кроссбраузерность, легкость в использовании
Такой проект пишется не день и не два. Особенно, если надо тестировать в разных браузерах и выискивать интересные мелкие баги.
Месяц спустя тебя начальство спрашивает: "Этааа, чем ты последний месяц занимался". Что ты ответишь? Что проел 1000 долларов, реализуя что-то, что можно получить бесплатно и уже месяц тому назад?
Z>>>К тому же мне нужно оттянуть время на изучение, потом на сопровождение развития всего этого дела, каждый фреймворк развивается и поддерживается по-разному, нужно следить, вычитывать, увольте. Мораль — не всем проще и удобнее с фреймворком.
M>>Знаешь среднее время выучивания jQuery? 2-5 дней
Проверено на 11 людях, включая меня
Z>Верю, вы ж в исходники не лезете.
При чем тут исходники? Ты не поверишь, но в любом фреймворке надо знать не исходники, а публично доступные функции. Это относится к любому фреймворку или библиотеке. В исходники лезут, когда библиотека работает некорректно. Для того, чтобы работать с jQuery достаточно
документации по ее функциям.
В исходники можно залезть, чтобы посмотреть, не творит ли библиотека что-нибудь непотребное. На это в случае с jQuery уйдет максимум час.
M>>Учти, что твой код тоже надо учить. Особенно, если ты, напимер, уволишься или перейдешь на другой проект, а твой код кому-то придется сопровождать и/или править.
Z>Это правда, тут я согласен. Тогда контрвопрос. Работаете вы, 11 друзей Оушена, годами интенсивно с jQuery, потом вас неблагодарные бизнесмены увольняют и вы приходите, предположим, ко мне, где рай для javascript-программистов от сохи, чистых, стерильных. Внимание, вопрос, на кой ляд мне ваш jQuery-шный опыт?
В случае с jQuery все просто. Берется в руки
документация и уже под конец рабочего дня новый программист, даже не глядя в туториалы, начинает активно работать как со старым кодом, так и начинает писать новый. У тебя к твоему фреймворку есть централизованная документация?
M>>Ну-ну. Я очнеь хочу посмотреть на того человека, который с нуля ручками за 2-3 дня напишет функционал, равный jQuery. Кстати, я из jQuery уже выдирал куски кода (типа extend, например), для использования в "чистом JS". Ничего, не умер. Во всех остальных случаях, когда надо было использовать хотя бы три-четыре функции, аналогичные jQuery, легче (и оправданнее) использовать jQuery.
Z>Подожди, средней руки javascript-программист написал jQuery, талантливый программист, но при этом плохой javascript-программист, написал Prototype.js, ты считаешь, что в мире нет людей, способных на такие "подвиги"? Есть. Только видимо это им не надо, у каждого свои смыслы жизни.
Я верю, что есть люди, способные написать второй jQuery/Prototype и.т.п. Но, как ты верно подметил, "видимо это им не надо, у каждого свои смыслы жизни". Поэтому они берут тот же jQuery и на его сонове творят... Ну, например
Ext
Z>>>Ну, не идеализируй пожалуйста, своего любимца, не такой уж он и гибкий, не такой уж и лёгкий и т.д.
M>>Аргументы, пожалуйста. Мой аргумент вот:
M>>M>>$("a.ajax").click(
M>> function(){
M>> $.get(
M>> $(this).attr("href"),
M>> {},
M>> callback
M>> )
M>> }
M>>);
M>>function callback(result){
M>> $("#mydiv").append(result);
M>>}
M>>
M>>Этот код понятен даже человеку, который jQuery в глаза не видел. Для того, чтобы написать такой код, надо прочитать статью — и все.
Z>Аргументы негибкости? Так чего тут гибкого ты же не объясняешь, приводишь "типа-гибкий" код. Мне этот код по большому счёту не понятен, вижу ряд вызовов, вижу некорректное использование в качестве идентификатора доллара (с этим уже поспоришь, развратили всех), вижу какие-то ещё идентификаторы, вижу аргументы, вижу... и чего дальше... надо идти к самодельным туториалам и смотреть, кто есть кто. Не говоря уж о гибкости.
Читается так: Элементом A с классом ajax присвоить обработчик события "click" такой: вызвать ajax метод get к url'у, который берется из аттрибута href; по зваершению вызова вызвать функцию callback. В функции callback найти элемент с id="mydiv" и дописать ему в конец полученный с сервера ответ.
Для понятия этого кода максимум, что нужно, это
документация по методам jQuery.
M>>Аналог на JS я уже приводил: http://jqueryjs.googlecode.com/svn/trunk/jquery/src/ajax/ajax.js, функция ajax. Попрошу обратить внимание на такие строчки, как:
M>>M>>// IE likes to send both get and post data, prevent this
M>>// Create the request object; Microsoft failed to properly
M>>// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
M>>// Set the correct header, if data is being sent
M>>// Set the If-Modified-Since header, if ifModified mode.
M>>и так далее. Ты уверен, что твой код будет все это делать и делать правильно?
Z>Не уверен. А ты уверен в jQuery, не читая исходников? И эта уверенность зиждется видимо на том, что сотня сайтов не докладывает об ошибках. Что ж, тоже подход.
Да, я уверен в jQuery хотя бы поэтому:
http://dev.jquery.com/report/16
Я вижу активное исправление ошибок, связанных, в частности, с кроссбраузерностью.
M>>Аргументируй, плиз. На данный момент по соотношению размер/качество jQuery действительно является таковым.
Z>Проще чистого javascript нет ничего. Вспоминаем пример с алертом.
Не надо приводить синтетические примеры. Я привел пример с $("a.ajax") и его реализацию на чистом JS. Как только сложность кода вылазит за простой alert(), код на чистом JS начинает расти в геометрической прогрессии. Его приходится оборачивать в функции, объекты и т.п., получая такой же фреймворк, вид сбоку.
M>>>>Ключевое здесь — гибкое и легкое.
M>>>>При этом "ручками" мы теряем гибкость. Как только мы добавляем в код гибкость, мы получаем что? Правильно — jQuery, prototype.js, mochikit, dojo или какую иную библиотеку.
Z>>>Неправильно. Если подразумевается re-use, то нормальный программист всегда будет писать в таком ключе, ничего в этом нет революционного, он сделает себе пакет, под себя, без мусора и избыточной функциональности. И то, что он сделает, просто останется вне зоны твоего/моего/мирового внимания, что никак не говорит о том, что этот код хоть чем-то проигрывает в гибкости и т.п. фреймворкам.
Что будем делать, когда понадобится дополнительная функциональность?

В jQuery я получаю всего 20KB кода и функциональность, которая покрывает до 90% моих нужд. Чем он плох?
M>>Правильно. И нанаписание и отладку такого кода у него уйдет сколько? Месяц? Два? А работать в это время кто будет?
Z>Отлаживать 2 месяца пару-тройку функций, раскрашивающих строки у таблицы???
Это он на одной странице таблицу раскрашивает. На другой — он оперирует многострочной формой на сложных правилах. Так как он и так закеширован браузером, не вижу смысла использовать самописный код на 2-3 из сотни страниц.
M>>Так вот. jQuery — это точно такой же "типа-фреймворк". Только его предложили использовать не только внутри отдельно взятой компании, а всему миру. Это — плохо? Учитывая, что этот фреймворк — компактный и быстрый.
Z>Ключевая фраза — "предложили использовать миру", у других могут быть свои решения не менее компактные, не менее быстрые, определённой функциональности, только они "не предлагают это миру", у всех свои смыслы. Я не говорю, что предлагать фреймворк — это плохо, меня убивает противопоставление его по лже-простоте "чистому" javascript и пропаганда фреймворков.
Тьху. Если у каждого программиста и так есть свой "типа-фреймворк", то где же тут пропаганда?
А фреймворк jQuery действительно позволяет находить решения быстрее, чем аналогичные на чистом JS. Кстати, как только ты написал свой "типа фреймворк", то у тебя уже тоже не "чистый JS". В этом отношении jQuery ничем не грязнее твоего фреймворка — он тоже на JS написан.
M>>А у тебя что за пренебрежение к фреймворкам? :
M>>M>>Лично мои задачи решаются проще мною же лично, как ты говоришь, ручками. И масса людей со мной солидарны, благо jQuery и проч. пока ещё не захватили мир (не удалось это ни DHTML библиотекам, не выйдет это и у нынешних новомодных)
Z>Это не пренебрежение, это сопротивление.
Чему сопротивляться, если у тебя такой же фреймворк написан, пусть и ручками?
M>>Чем твой собственный фреймворк лучше, чем jQuery? Я тебе сразу скажу, чем он хуже:
M>>- У тебя нет возможности протестировать его на всех комбинациях популярных браузераов
Z>Есть.
У тебя есть время протестировать его, скажем, на Konqueror 3.5? Тебе на это отдельно выделяют время и деньги? Если да, то тогда нельзя не порадоваться за тебя. У нас такой возможности нет. И у 90% прораммистов в целом тоже нет. Поэтому свои собственный фреймворки изобретать мы не просто не можем — мы не имеем права. Потому что есть такая вещь, как time to market.
M>>- У тебя нет возможности проводить интенсивное выявление ошибок: http://dev.jquery.com/report/16, потому что у тебя просто нет такого количества пользователей (например, у тебя есть закрытый баг репорт типа такого: http://dev.jquery.com/ticket/1341
). Под пользователями я имею в виду не посетителей сайта, а разработчиков, использующих твой код.
Z>Это верное замечание. Как jQuery пытается втащить в себя отутюженные решения, так и я при сомнениях оценю и воспользуюсь тем подходом в js-сообществе, который считается наиболее безопасным, не вижу сложности.
На это нужно время. У нас же основное направление разработки — не разработка собственного js-фреймворка и его отладка.
M>>- У тебя нет возможности привлечь к разработке других разработчиков: http://groups.google.com/group/jquery-dev
Z>Не аргумент.
Вполне аргумент. В рассылке пробегали предложения, как увеличить скокрость селекторов на 3-5 миллисекунд от различных разработчиков. Эти изменения потом внедряются в jQuery
M>>ЗЫ. Разработчики всегда будут пользоваться сторонними библиотеками. Потому что это повышает производительность. Потому что обычно нет времени на разработку аналогичного функционала. Потому что проекты надо здавать завтра, а не через полгода. Потому что велосипеды интересно писать, когда только изучаешь технологию, потом велосипеды просто не оправдывают себя.
Z>Тема велосипедов не раскрыта. Если ты в своих проектах пользуешься jQuery, которая абсолютно всё для тебя изобрела, то что тогда остаётся для твоего javascript-программирование? Что интересного осталось?
Мое поле деятельности — не создание javascript фреймворков. Я пишу конкретный проект для конкретных целей. Нам jQuery позволил решить интереснейшие проблемы по созданию ajax-based shopping cart, и сложнейшую форму создания изменений цен.
Если бы я был именно javascript-разработчиком, я бы начал писать для себя легковесный аналог
Ext.
jQuery — очень низкоуровневый фреймворк. Он позволяет мне обратить внимание на более приятные вещи, чем кросс-браузерный аякс, кросс-браузерная анимация или кросс-браузерная манипуляция DOM-ом. Последние три вещи мне предоставляет jQuery и мне нет смысла писать их заново с нуля.