Выбор технологии для RIA

kokoc88

В декабре я начинаю новый проект, который должен быть RIA. Из самых тяжёлых Rich компонент пока что известно только о наличии сложных графиков с тултипами, деревьев с иконками, табов и модальных форм для ввода информации. Скорее всего, у заказчика стоят самые дешёвые компьютеры с IE6, и изменить это не представляется возможным. Установка Silverlight и Flash может вызвать затруднения, но не невозможна.
До сих пор я сделал только один коммерческий веб-проект на обычном сочетании Tomcat/JSP/HTML/CSS/JavaScript. Эти технологии позволяют достаточно универсально реализовать почти любые требования. Но они также добавляют много проблем: кросс-браузерность, утечки памяти (привет IE6 проблемы с оптимизацией, сложность отладки в некоторых случаях (привет alert большое время разработки. В данный момент я пытаюсь до конца определиться с технологиями, которые будут использованы в моём новом проекте. Получается примерно следующая картина (можно не читать, и перейти сразу к выводам):
1. Писать руками HTML/CSS/JavaScript умеет только один разработчик. Остальные знают только C# и Windows Forms. При упоминании о DOM, Java, Application Server, JavaScript, AJAX и HTML/CSS теряют волю и падают в обморок. В принципе Java учится достаточно быстро, думаю где-то за неделю можно осилить. Можно взять Java/JSP/Struts/Spring/etc. и какую-нибудь хорошую JavaScript библиотеку типа jQuery. Хотя это не решает всех проблем с кросс-браузерностью.
2. От Silverlight отказались практически сразу по различным причинам. Лично у меня все время возникает ощущение, что почти все серьёзные сайты на Silverlight покрыты густым киселём. Я не в восторге и от WPF, потому что слишком легко заставить его тормозить, тем более на слабых компах. О синтаксисе Data Binding в XAML я вообще молчу. Кроме того, проект начинается через неделю, а в 2008 студии отрублен дизайнер Silverlight 3. Плюсом является только то, что все программисты знают C#
3. Adobe Flex в общем понравился за исключением некоторых неприятных моментов. Например, в текстовом редакторе не работает CTRL/SHIFT+INS, копирование текста только через CTRL+C/V. Это вызывает некоторые опасения за поведение остальных контролов. Кроме того, в команде нету ни одного разработчика, который знал бы MXML и ActionScript. Технология BlazeDS тоже вызывает некоторые вопросы, тем более у меня нету ни одного знакомого разработчика, который бы использовал эту технологию в коммерческом проекте и мог бы описать её минусы.
4. Технология ASP.NET не впечатляет. (Вообще Microsoft молодцы, кто ещё мог в 2009 году разродиться на MVC 1979-го года выпуска?!...) Мне кажется, что в итоге получится даже хуже, чем с JSP/etc. Опять же, у нас ни один разработчик не имел дела с этой технологией. Сюда, скорее всего, придётся добавить все проблемы с разработкой на JavaScript и HTML/CSS. Кроме того, уж слишком много примеров ASP.NET сайтов, которые тупо тормозят. Зато вся моя команда знает C#
5. Весьма интересна технология GWT. По крайней мере она позволяет частично избавиться от разработки на JavaScript, помогает избежать утечек памяти, и так далее. Конечно, от проблем с кросс-браузерностью GWT полностью не спасает. Приятно, что количество кода на JavaScript/HTML/CSS сильно сокращается.
Подведу итог. В данный момент наиболее перспективными мне кажутся следующие решения:
1. Всё на Adobe FLEX и сервер на Java с использованием технологии BlazeDS.
2. Приложение на GWT, графики на Adobe Flex Data Visualization.
3. Приложение на GWT и обёртки для JavaScript библиотеки, скорее всего jQuery с графиками на jqPlot.
Хотелось бы узнать мнение разработчиков, которые постоянно занимаются разработкой RIA/WEB Applications. Какие могут быть проблемы с выбранными решениями, есть ли какие-нибудь рекомендации по выбору других технологий?

katrin2201

По GWT могу посоветовать посмотреть в сторону готовых RIA библиотек типа GXT или SmartClient. Первый - нативно на ГВТ написан, и в целом поприятнее, зато с коммерческой лицензией. Второй - опенсурс, обертка над js либой, на мой вкус УИ страшноват.
Конечно, со всеми такими либами проблема - т.к. они все не есть mature, то для большого ентерпрайзи приложения применять их может быть нецелесообразно. Хотя, если готовы купить лицензии на GXT с суппортом...
По поводу чего взять, если бы я был на твоем месте, то я бы обязательно потратил бы несколько дней, чтобы на каждом из вариантов наваять экзампл средней навороченности.
Не знаю, как с флексом, но в гвт основная масса траблов вылезет сразу.
Если интересно - могу порассказывать про связку GWT-GXT-Hibernate. Опыт с такой связкой у меня не ахти - пару доморощенных проектиков, но так, jic.

kokoc88

Если интересно - могу порассказывать про связку GWT-GXT-Hibernate. Опыт с такой связкой у меня не ахти - пару доморощенных проектиков, но так, jic.
Да, было бы неплохо послушать про то, с какими проблемами ты сталкивался при использовании GWT. Я успел заметить несколько вещей, которые убедили меня в том, что эта технология не спасает от некоторых специфических проблем с кросс-браузерностью. Также мне стало понятно, что всё равно надо иметь представление о DOM, CSS, и в некоторых случаях о JavaScript. Ещё очень не радует, что 8-ая IDEA не поддерживает последнюю версию GWT, а в 9-ой beta есть ряд проблем, которые делают разработку очень неприятной.
Интересны вопросы поддержки истории в браузере, обвязки вокруг GWT-сервисов, реализации stateless сервера, unit testing, и т.п.

SCIF32

ie6 и много js-а по-моему не очень совместимы,особенно с графиками на js.
а нельзя заказчика уговорить поставить, скажем хром (на сколько я понимаю, он быстрее ie6, хотя я хз как обстоят дела, если память ограничена)?
это решает сразу несколько проблем,
по крайней мере стоит поговорить с заказчиком, объяснив преимущества.
jquery - правильный выбор.
jqplot - не помню почему, но в свое время мы отказывались от js-библиотек и использовали флеш.
по-моему из-за кросс-браузерности, тормознутости js на ie6 и того, что найденный флешовый модуль поддерживал большее количество графиков (а может просто был красивее)

katrin2201

Я успел заметить несколько вещей, которые убедили меня в том, что эта технология не спасает от некоторых специфических проблем с кросс-браузерностью.
Эм, ну, собственно, чудес нету. Кроссбраузерность есть только если ты строишь из кирпичиков gwt-онли, причем без своего css.
Любой другой шаг в сторону - и ты получаешь полный букет прелестей.
Также мне стало понятно, что всё равно надо иметь представление о DOM, CSS, и в некоторых случаях о JavaScript
Если ищется инструмент, способный полностью изолировать тебя от мороки с этими вещами - то ГВТ, к сожалению, не тот случай. Все равно придется писать свою УИ либу, или юзать-допиливать чужую, а это делается написанием-допиливанием кастом html'я.
С учетом замороченности, я бы сказал, что тут не то что представление надо иметь о вышеперечисленном, а надо неплохо рюхать. По крайней мере тем, кто будет писать/отлаживать эти самые УИ компоненты.
Ещё очень не радует, что 8-ая IDEA не поддерживает последнюю версию GWT, а в 9-ой beta есть ряд проблем, которые делают разработку очень неприятной.
Есть такое. Но на моей практике эта "неполная" поддержка ни во что особое, кроме варнинга, не выливается. Накрайняк можно и на старой версии гвт остаться, никаких критичных мегаплюшек у 1.6 по сравнению с 1.5 я не нашел.
9 бета, кстати, у меня себя вполне адекватно ведет. За исключением возникающих тут и там уи-рилейтед ексепшенов, но для джетбрейновских бет это обычное дело.
Да, было бы неплохо послушать про то, с какими проблемами ты сталкивался при использовании GWT.
Интересны вопросы поддержки истории в браузере, обвязки вокруг GWT-сервисов, реализации stateless сервера, unit testing, и т.п.
Из стандартных - ужасно медленный компилятор. Единственный костыль-лекарство - отключение на девелоперских машинках лишних пермутейшенов. Это делается исключительно пересборкой компилятора из сурсов, что, мягко говоря, не есть удобно.
Почему в гугле закрывают на это глаза уже очень долго время - я не понимаю.
В хостед моуд многое зачастую выглядит/ведет_себя иначе, нежели чем в реальном браузере. То есть, опять же, чудес не бывает.
Добавь к этому возможные проблемы поднятия всех компонентов своего приложения в этом хостед-моуд-джвме (какой-нить ж2ее аппсервер и ты можешь легко получить полную бесполезность этого моуда.
Плюс, если юзается не нативная для гвт RIA библиотека (а нативных - кот наплакал то, ясен пень, дебаг дальше гвт-обертки не пойдет в любом случае.
Сама УИ база кирпичиков ГВТ довольно бедна. Все, что накапывается из 3rdparty, типа гвт-инкубатора, или gxt/smartclient - или сырое, или замороченное, или платное, или все вместе. Легко и непринужденно начать клепать аляповатые шняшки не получится. В каком-нибудь ASP.NET это получится гораздо легче.
Есть некие затыки при трансфере pojo на клайент-сайд. Очевидно, поддерживаются только те классы, которые знает компилятор. Все остальное - фиг. Соответственно, без дополнительных усилий нельзя на клайент сайд унести даже тупо аннотированные хибернейтом модельные классы - будет ругаться на аннотейшены.
Год назад в общем доступе был ровно один сыроватый солюшен - gilead. Разработчик там один, и не сильно мотивированный, правда баги фиксил, так что боле-мене едабельно. Но, опять же, в крупном проекте я бы постремался.
У гуглвейв, например, со слов их разработчиков, пользуются какой-то своей кастомной надстройкой, где у клайент- и сервер-сайдных объектов из общего только интерфейс, а внутренности у каждого свои, и надстройка при маршализации seamlessly их туда-сюда конвертит.
История в браузере сделана вполне разумно - с помощью хистори токенов. Работает аут-оф-зе-бокс =) Правда, придется, скорее всего, руками написать классик-другой, разбирающие токен-строчку на пары имя_параметра-значение, и по этому токену подгружающие нужный экранчик в нужном стейте(короче, некое подобие контроллера). Но на фоне всего остального это - капля в море.
Вокруг GWT-сервисов обвязка стандартная. Их можно воспринимать как обычные сервлеты, большинство привычных по сервлетам вещей там есть.
Про stateless сервер - не понял - слова понятные, но проблематика непонятна.
С юнит тестингом - пожалуй, как в любом аджакс приложении. ГВТ тебе тут жизнь не усложнит, но и ничем не поможет.

yroslavasako

Мне доводилось пользоваться проектами на JSF (Java Server Faces писать нет. Что скажут местные гуру, оно того стоит, чтобы изучать?

katrin2201

shrug : чего там изучать-то?
А вообще - по мере надобности. Или заинтересованности. Но ничего сверхъестественного ты в JSF не найдешь.
Если в джава-вебслое нуп - то, пожалуй, начинать стоит с чего-то более базового.

timefim

JavaFX совсем не вариант?

kokoc88

Если ищется инструмент, способный полностью изолировать тебя от мороки с этими вещами - то ГВТ, к сожалению, не тот случай. Все равно придется писать свою УИ либу, или юзать-допиливать чужую, а это делается написанием-допиливанием кастом html'я.
Понятно. Но ведь точно такие же проблемы есть и с любой другой GUI библиотекой: Windows Forms, Swing, WPF, etc. Интересно, насколько развита библиотека контролов в Adobe Flex. Впрочем, там скорее всего всё тоже самое: надо неплохо знать MXML и ActionScript. В общем-то начальство не против покупки вот этой штуки: http://www.extjs.com/products/gxt/, надеюсь она просто "платная", а не "платная и сырая". :) Кстати, почему ты считаешь, что у ASP.NET ситуация лучше? Компоненты под него разрабатывают такие наследники Delphi стиля, как Syncfusion и DevExpress - выглядит и работает хорошо только в рекламе и туториалах. Со мной сейчас работают люди, которые неплохо разбираются в ASP.NET, и от его использования они отговаривают.
9 бета, кстати, у меня себя вполне адекватно ведет.
У меня она во время сборки проекта не выкладывает новые html, css, картинки и т.п. Каждый раз приходится перезапускать сервер. Может быть, я что-то не так настроил?..
Про stateless сервер - не понял - слова понятные, но проблематика непонятна.

Проблема в том, что я никогда таких не делал. :)
Добавь к этому возможные проблемы поднятия всех компонентов своего приложения в этом хостед-моуд-джвме (какой-нить ж2ее аппсервер и ты можешь легко получить полную бесполезность этого моуда.

Да, это наверное самая серьёзная проблема. Остальные так или иначе будут встречаться и в других технологиях. Осталось узнать проблемы, связанные с Adobe Flex, чтобы всё-таки выбрать что-нибудь для разработки. Уже второй день сижу в гугле.... :)

kokoc88

JavaFX совсем не вариант?
Этой технологии меньше года, конечно же не вариант.

Dasar

Со мной сейчас работают люди, которые неплохо разбираются в ASP.NET, и от его использования они отговаривают.
может другое еще хуже?

kokoc88

может другое еще хуже?
Adobe Flex уж точно не хуже. А тот же JSF как минимум эквивалентен, с плюсами и минусами в обе стороны.

Dasar

Adobe Flex уж точно не хуже.
но за спиной asp.net-ом + silverlight большой опыт именно промышленной разработки, которого у flex-а нет.
т.е. на технологии adobe-а обычно жалуются, что на них тяжело делать большие проекты.

katrin2201

В общем-то начальство не против покупки вот этой штуки: http://www.extjs.com/products/gxt/, надеюсь она просто "платная", а не "платная и сырая".
Года полтора назад там было все так себе.
Довольно навороченная архитектура, местами просвечивающий индусский код, баги с отображением/поведением в неожиданных местах.
Дебажить поведение их контролов для меня, как человека в html/css не сильно искушенного, было проблематично - приходилось много сидеть в файербаге/вебдевелопере втыкая в пирамидище нагенеренных этим gxt дивов.
Что приятно - полная открытость сурса со всеми вытекающими - то есть в итоге не было ни одной проблемы, которая не была бы так или иначе решена. Местами решения были грязные, местами приходилось расширять внутренние классы либы.
Местами было потрачено довольно много времени. Хотя лично мне было достаточно приятно покопаться в их коде, это у вас может обернуться проблемой, ибо сроки будет тяжелее оценивать.
Возможно, стоит сразу завести свой бранч для этой либы, чтобы можно было легко править их код, и потом мерджить эти правки с изменениями самого вендора. Это уменьшит кол-во грязных хаков и существенно упростит задачу допиливания, ибо можно будет чуть что сразу править их код, не боясь потом потерять эти изменения. Я же до правки их кода опускался только если иначе было уже никак.
Еще из приятного - у них весьма адекватный живой суппорт. При коммерческой лицензии у вас будет ридонли доступ к их девелоперскому свну, плюс ваши реквесты будут рассматриваться в приоритете (мои неприоритетные багрепорты рассматривались и зачастую фиксились в течение нескольких дней соответственно все ваши разумные хотелки должны достаточно быстро удовлетворяться. И фикс можно будет моментально забрать из свна не дожидаясь релиза.
В общем, за те полгода, что я пользовал эту либу, ребята довольно неплохо поработали над багами, и серьезно подлатали индусские дырки.
Энивей, из native-gwt, этот - самый mature проект.
Кстати, почему ты считаешь, что у ASP.NET ситуация лучше? Компоненты под него разрабатывают такие наследники Delphi стиля, как Syncfusion и DevExpress - выглядит и работает хорошо только в рекламе и туториалах. Со мной сейчас работают люди, которые неплохо разбираются в ASP.NET, и от его использования они отговаривают.
В моем отзыве о АСП ключевые слова - легко и непринужденно. У gwt/gwt+gxt лернинг курв не такой приятный.
Если говорить о взгляде в даль (гибкость/расширяемость) - то тут я, конечно, за гвт.
У меня она во время сборки проекта не выкладывает новые html, css, картинки и т.п. Каждый раз приходится перезапускать сервер. Может быть, я что-то не так настроил?..
Запросто. Надо смотреть. Они же придумали эту клевую систему артефактов. Так вот она в первом билде не хотела копировать даже классы в джарник, что уж там... Правда со следующим еапом они это пофиксили.
Попробуй пошариться в ихнем трекере на предмет зарепорченной ошибки - кейс обычный, так что если это общая проблема, то наверняка такой баг там уже зарепорчен.
Можешь так же мне прислать тестовый проектик, если есть, - с удовольствием покопаюсь.
Проблема в том, что я никогда таких не делал.
Просто это скорее упрощение обычных требований, чем их усложнение, поэтому и непонятно =)

kokoc88

но за спиной asp.net-ом + silverlight большой опыт именно промышленной разработки, которого у flex-а нет
За ASP.NET может быть что-то и есть. Но как я уже говорил 95% этого чего-то безбожно тормозит. Так можно взять PHP/jQuery и будет намного лучше.
С Silverlight это, конечно же, не так. Чего только стоит неудавшийся Microsoft Download Center, который Microsoft не смогли полностью сделать на своей же технологии. Да и более-менее юзабельная версия вышла в этом году. В то время как на Flex существует действительно большое количество приложений, в конце концов он был выпущен на три года раньше, чем Silverlight. И большие проекты уж точно поимеют одинаковые проблемы в обоих случаях. :)

Dasar

Но как я уже говорил 95% этого чего-то безбожно тормозит.
а что ты смотрел?
посмотрел showcase от microsoft-а - там везде понапихано куча hi-resolution графики, да еще с какой-нибудь мега обработкой - все это и "киселит".
на flash-е, на сколько я понимаю, таких наворотов просто не делают - поэтому оно и бегает быстрее.

kokoc88

Запросто. Надо смотреть. Они же придумали эту клевую систему артефактов. Так вот она в первом билде не хотела копировать даже классы в джарник, что уж там... Правда со следующим еапом они это пофиксили.
Блин, я не могу эти артефакты правильно настроить. А пробую я обычный Hello World, импортированный из Eclipse. Меняю в нём стартовую страничку и всё.
Щас попробую Hello World, изначально сделанный в IDEA.

katrin2201

Блин, я не могу эти артефакты правильно настроить. А пробую я обычный Hello World, импортированный из Eclipse. Меняю в нём стартовую страничку и всё.
Щас попробую Hello World, изначально сделанный в IDEA.
А ты чего? Простенький warник пробуешь собрать?

kokoc88

Щас попробую Hello World, изначально сделанный в IDEA.
Та же фигня.
Нет, я просто запускаю Hosted Mode, дальше меняю код и ожидаю, что после перекомпиляции она поменяет содержимое папки
C:\Documents and Settings\\.IntelliJIdea90\system\gwt\TestWebToolkit.TestWebToolkitfb946981\TestWebToolkit.6cf75c9e\run\www

timefim

Релиз был через два месяца после силверлайта.

kokoc88

Релиз был через два месяца после силверлайта.
После какого сильверлайта?
Silverlight 1.0 RTW 1.0.20816 2007-09-05
On December 4, 2008 Sun released JavaFX 1.0

timefim

Silverlight 1.0
Эта несуразность в расчет не берется.
Оставить комментарий
Имя или ник:
Комментарий: