08/20: Я тоже хочу AJAX!
Сколько себя помню, выбор всегда был для меня тяжелой штукой. Не изучив внимательно все мало-мальски хорошие варианты, и не поняв, что я теряю, я просто не мог определиться. Так было и с выбором django в качестве фреймворка для проектов, и еще много с чем, о чем вы совершенно даже не догадываетесь :)
Говорят, 99% мыслительных ресурсов человек тратит именно на выбор. Вот и сегодня я таким образом угрохал бОльшую часть дня, разбираясь с различными javascript-движками для обеспечения AJAX, которые мне бы помогли реализовать интерфейс для одной страницы, придуманной вчера ночью и нарисованной в виде макета на бумажке, а потом и на компьютере с использованием нашего суперсекретного проекта для Eclipse ;)
Первый движок, который привлек мое внимание — это dojo. Я неоднократно встречал упоминания, что все дороги ведут к dojo, “я выбираю dojo”, или что определенные феньки в других местах взяты из dojo. Хотелось чего-то простого. Типа, как прикрутить dojo к django и как их вместе использовать на таком или сяком примере. Но до практического использования как-то не доходило. Я шатался по различным страничкам в надежде найти что-то простое-простое, такое, чтоб можно было читать и беззвучно смеяться от удивления, как все оказывается просто. Так было с django и такое всегда у меня бывает, когда видишь очередную The Right Thing. Простое должно оставаться простым. Всегда. Иначе до сложного дело просто не дойдет.
Однако с dojo простого не находилось. Вместо аналога для Рубинового
Конечно, свои ajax-виджеты — это круто, но мне нужна простая ajax-отправка формы, изменение пары числовых параметров и добавление строки таблицы (это уже посложнее). Хоть убейте меня, но мне не нужен виджет моей веб-формы! :) И последнее, что меня сразу обидело и разочаровало в dojo: свои виджеты имеют свои не html-ные атрибуты, которые пишутся в html! С меня и так хватает доставшегося в наследство от шаблона nucleus’а атрибута nicetitle, который я еще не решился заменить на что-то лучшее (помните про сложность выбора? :) ).
Утомленный и разочарованный, сел почитать про AHAH. Это по-английски. Asychronous HTML and HTTP. И вроде бы попроще, чем dojo. Ну, вроде все хорошо. Только нет того, что мне надо…
Уфф. Прогулка по сайтам мне дала очень многое. Я теперь знаю, как коротко записать то, что я хочу сделать, но не знаю, какие эджэкс-энжинз мне это позволят сделать.
Итак, смотрите, что мне хотелось бы иметь:
1) умение делать запрос с возвратом в виде json и отловом ошибок HTTP. Примерно таким образом:
2) функция, вызываемая по результату получения json должна уметь заменять теги типа <div> на часть выдачи json. Одного div’а мне будет маловато, а вот несколько div’ов в разных подразделах json’а были бы в самый раз. Ну ладно, пусть даже будет не json, а голые куски xhtml. Потом уж я их сам расчленю =:-]
Таак… нашелся еще prototype.js. Смотрю на prototype example из этого примера — да, самое то! Ух ты, и библиотека всего в одном файле!.. Что это?! 47 килобайт кода?!?! Это в 5 раз больше, чем та страница, которая будет использовать этот javascript!
Так, посмотрим еще на конкурентов. Прямо рядом есть mochikit example. Модульная, как сказано, “lightweight”, но немного больше в базовой конфигурации. Кило на 20 B) Так, еще есть YUI — Yahoo UI. Щас скачаем архивчик… 3.9 мегабайт?!?! Шучу, это вместе с доками и примерами :) Многовато, да. А сама библиотека в компактном формате 300 кб. Если выкинуть ненужное, получится… кило 60 наверное.
Похоже, фаворит определился. Им оказался prototype, используемый в Ruby. Только надо будет вырезать из файла все лишнее и убрать в нем пробелы и переводы строк. От одних только пробелов и переводов строк уберется 10 килобайт.
Все. Выбор сделан в пользу prototype.js. Посмотрим еще напоследок список всех ajax библиотек.
p.s. А еще я не люблю выбор менять. Но об этом в следующий раз.
Говорят, 99% мыслительных ресурсов человек тратит именно на выбор. Вот и сегодня я таким образом угрохал бОльшую часть дня, разбираясь с различными javascript-движками для обеспечения AJAX, которые мне бы помогли реализовать интерфейс для одной страницы, придуманной вчера ночью и нарисованной в виде макета на бумажке, а потом и на компьютере с использованием нашего суперсекретного проекта для Eclipse ;)
Первый движок, который привлек мое внимание — это dojo. Я неоднократно встречал упоминания, что все дороги ведут к dojo, “я выбираю dojo”, или что определенные феньки в других местах взяты из dojo. Хотелось чего-то простого. Типа, как прикрутить dojo к django и как их вместе использовать на таком или сяком примере. Но до практического использования как-то не доходило. Я шатался по различным страничкам в надежде найти что-то простое-простое, такое, чтоб можно было читать и беззвучно смеяться от удивления, как все оказывается просто. Так было с django и такое всегда у меня бывает, когда видишь очередную The Right Thing. Простое должно оставаться простым. Всегда. Иначе до сложного дело просто не дойдет.
Однако с dojo простого не находилось. Вместо аналога для Рубинового
<%= form_remote_tag с параметром :update => 'ajax result' сайты предпочитали утыкаться в dojo.require и dojo.io.bind с кучей параметров. Что, каждый раз вебмастеры такое пишут??? Поубивал бы!
Конечно, свои ajax-виджеты — это круто, но мне нужна простая ajax-отправка формы, изменение пары числовых параметров и добавление строки таблицы (это уже посложнее). Хоть убейте меня, но мне не нужен виджет моей веб-формы! :) И последнее, что меня сразу обидело и разочаровало в dojo: свои виджеты имеют свои не html-ные атрибуты, которые пишутся в html! С меня и так хватает доставшегося в наследство от шаблона nucleus’а атрибута nicetitle, который я еще не решился заменить на что-то лучшее (помните про сложность выбора? :) ).
Утомленный и разочарованный, сел почитать про AHAH. Это по-английски. Asychronous HTML and HTTP. И вроде бы попроще, чем dojo. Ну, вроде все хорошо. Только нет того, что мне надо…
Уфф. Прогулка по сайтам мне дала очень многое. Я теперь знаю, как коротко записать то, что я хочу сделать, но не знаю, какие эджэкс-энжинз мне это позволят сделать.
Итак, смотрите, что мне хотелось бы иметь:
1) умение делать запрос с возвратом в виде json и отловом ошибок HTTP. Примерно таким образом:
<form onsubmit="request(parseForm(this), func, errorfunc, /*timeout*/ 30); return false;">
2) функция, вызываемая по результату получения json должна уметь заменять теги типа <div> на часть выдачи json. Одного div’а мне будет маловато, а вот несколько div’ов в разных подразделах json’а были бы в самый раз. Ну ладно, пусть даже будет не json, а голые куски xhtml. Потом уж я их сам расчленю =:-]
Таак… нашелся еще prototype.js. Смотрю на prototype example из этого примера — да, самое то! Ух ты, и библиотека всего в одном файле!.. Что это?! 47 килобайт кода?!?! Это в 5 раз больше, чем та страница, которая будет использовать этот javascript!
Так, посмотрим еще на конкурентов. Прямо рядом есть mochikit example. Модульная, как сказано, “lightweight”, но немного больше в базовой конфигурации. Кило на 20 B) Так, еще есть YUI — Yahoo UI. Щас скачаем архивчик… 3.9 мегабайт?!?! Шучу, это вместе с доками и примерами :) Многовато, да. А сама библиотека в компактном формате 300 кб. Если выкинуть ненужное, получится… кило 60 наверное.
Похоже, фаворит определился. Им оказался prototype, используемый в Ruby. Только надо будет вырезать из файла все лишнее и убрать в нем пробелы и переводы строк. От одних только пробелов и переводов строк уберется 10 килобайт.
Все. Выбор сделан в пользу prototype.js. Посмотрим еще напоследок список всех ajax библиотек.
p.s. А еще я не люблю выбор менять. Но об этом в следующий раз.