Больших ловушек УГВ? [закрытый]
Я в начале/середине проекта, который мы решили реализовать с помощью GWT. Кто-нибудь сталкивался с какими-либо серьезными ловушками в использовании GWT (и GWT-EXT), которые не удалось преодолеть? Как насчет С точки зрения производительности?
пара вещей, которые мы видели / слышали уже включают в себя:
- Google не может индексировать контент
- CSS и стиль в целом, кажется, немного шелушится
ищет каких-либо дополнительных обратная связь по этим пунктам, а также. Спасибо!
24 ответа:
Я начну с того, что я массовый поклонник GWT, Но да, есть много подводных камней, но большинство, если не все, что мы смогли преодолеть:
: длительное время компиляции, поскольку ваш проект растет, так же как и количество времени, необходимое для его компиляции. Я слышал о сообщениях о 20-минутных компиляциях, но мои в среднем около 1 минуты.
устранение: разделите свой код на отдельные модули и скажите ant, чтобы он создавался только при его изменении. Также при разработке вы можете значительно ускорить время компиляции, создав только один браузер. Вы можете сделать это, поместив это в свой .ГВт.xml-файл:
<set-property name="user.agent" value="gecko1_8" />
где gecko1_8-Firefox 2+, ie6-IE и т. д.
: размещенный режим очень медленный (по крайней мере, на OS X) и не приближается к соответствию "живым" изменениям, которые вы получаете, когда редактируете такие вещи, как страницы JSP или Rails, и нажимаете обновить в своем браузер.
устранение: вы можете дать размещенному режиму больше памяти (я вообще получил для 512M), но он все еще медленный, я нашел, как только вы получите достаточно хорошо с GWT, вы перестанете использовать это. Вы делаете большой кусок изменений, а затем компилируете только для одного браузера (как правило, 20-х годов компиляции), а затем просто нажмите Обновить в вашем браузере.
обновление: с GWT 2.0+ это больше не проблема, потому что вы используете новый "режим разработки". Это в основном означает, что вы можете запустить код непосредственно в вашем браузере, поэтому нет потери скорости, плюс вы можете поджигатель/проверить и т. д.
http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM
: код GWT является java и имеет другой менталитет для выкладки HTML-страницы, что делает принятие HTML-дизайна и превращение его в GWT сложнее
устранение: снова вы привыкнете к этому, но, к сожалению, преобразование HTML-дизайна в дизайн GWT всегда будет медленнее, чем делать что-то вроде преобразования HTML-дизайна на страницу JSP.
: GWT занимает немного получить вашу голову вокруг, и еще не мейнстрим. Это означает, что большинство разработчиков, которые присоединяются к вашей команде или поддерживают ваш код, должны будут изучить его с нуля
устранение: это еще предстоит увидеть, если GWT взлетит, но если вы компания, контролирующая, кого вы нанимаете, то вы всегда можете выберите людей, которые либо знают GWT, либо хотят его изучить.
: GWT-это кувалда по сравнению с чем-то вроде jquery или просто javascript. Для этого требуется гораздо больше настроек, чем просто включение JS-файла.
устранение: используйте библиотеки, такие как jquery для небольших, простых задач, которые подходят для них. Используйте GWT, когда вы хотите построить что-то действительно сложное в AJAX, или где вам нужно передать свои данные обратно и далее через механизм RPC.
: иногда для того, чтобы заполнить вашу страницу GWT, вам нужно сделать вызов сервера при первой загрузке страницы. Это может раздражать пользователя, чтобы сидеть там и смотреть символ загрузки, пока вы получаете необходимые данные.
устранение: в случае страницы JSP ваша страница уже была отрисована сервером перед тем, как стать HTML, поэтому вы можете сделать все свои вызовы GWT и предварительно загрузить их на страницу, для мгновенной загрузки. Смотрите здесь для деталей:
ускорить загрузку страницы путем предварительной сериализации ваших вызовов GWT
У меня никогда не было проблем с CSS-стилизацией моих виджетов, из коробки, на заказ или иначе, поэтому я не знаю, что вы подразумеваете под этим?
что касается производительности, я всегда находил, что после компиляции GWT-кода быстро, а AJAX-вызовы почти всегда меньше, чем обновление всей страницы, но это не совсем уникальный для GWT, хотя собственные пакеты RPC, которые вы получаете, если используете Java-сервер, довольно компактны.
мы работаем с gwt уже почти 2 года. Мы извлекли много уроков. Вот что мы думаем:
Не используйте сторонние библиотеки виджетов, особенно gwt-ext. Это убьет вашу отладку, разработку и производительность во время выполнения. Если у вас есть вопросы о том, как это происходит, свяжитесь со мной напрямую.
используйте gwt только для заполнения динамических частей ваших приложений. Поэтому, если у вас есть некоторые сложные пользовательские взаимодействия с большим количеством полей. Однако не используйте панели, которые поставляются с ним. Возьмите существующие страницы, поставляемые дизайнером запаса. Выделить области, которые будут содержать элементы управления для вашего приложения. Прикрепите эти элементы управления к странице в onModuleLoad (). Таким образом, вы можете использовать стандартные страницы из вашего дизайнера, а также делать все стили за пределами gwt.
Не создавайте все приложение как одну стандартную страницу, которая затем динамически создает все части. Если вы делаете то, что я предлагаю в пункте 2, это не все равно случится. Если вы строите все динамически, вы убьете производительность и потребляете огромное количество памяти для средних и больших приложений. Кроме того, если вы сделаете то, что я предлагаю, кнопка "Назад" будет отлично работать, поэтому будет индексироваться поисковая система и т. д.
у других комментаторов также были хорошие предложения. Эмпирическое правило, которое я использую, - это создавать страницы, как вы делали стандартную веб-страницу. Затем вырезать куски, которые должны быть динамичными. Замените их элементами, которые есть id, а затем использовать
RootPanel.get( id ).add( widget )
чтобы заполнить эти области.
подводные камни, с которыми мы столкнулись:
хотя вы можете получить большой пробег от использования чего-то вроде GWT EXT, каждый раз, когда вы используете этот вид тонкого шпона поверх библиотеки JavaScript, вы теряете возможность отладки. Несколько раз я ударился головой о стол, потому что я не могу проверить (внутри моего отладчика IntelliJ), что происходит в классе таблицы GWT EXT... Все, что вы можете видеть, это то, что это JavaScriptObject. Это делает его довольно трудно понять, что такое пойти плохо...
Не имея кого-то в вашей команде, кто знает CSS. По моему опыту, это не имело значения, что человек не был expert...it ' достаточно того, что он имеет некоторые хорошие рабочие знания, и знает правильные условия для google, когда это необходимо.
отладки в различных браузерах. Следите за вне процесса размещенного режима[1][2][3], надеюсь, придет в GWT 1.6... На данный момент, Вы просто должны получить все хорошо с размещенным режимом, а затем используйте кнопку "Compile/Browse", где вы можете играть с другими браузерами. Для меня, работая на Windows, это означает, что я могу просматривать свою работу в FireFox и использовать FireBug, чтобы помочь настроить и улучшить ситуацию.
IE6. Это удивительно, как по-разному IE 6 будет отображать вещи. Я использовал подход применения стиля к самому внешнему "видовому окну" в соответствии с браузером, чтобы у меня были правила CSS например:
.my-style { /* stuff that works most everywhere */ } .msie6 .my-style { /* "override" so that styles work on IE 6 */ }
наконец, убедитесь, что вы используете редактор, который поможет вам. Я использую IntelliJ - у него много умных GWT. Например, если я пытаюсь использовать класс, который не обрабатывается эмуляцией JRE, он дает мне знать; если я указываю стиль для виджета, и я еще не определил этот стиль, код получает маленькую красную закорючку... Или, глядя на CSS, он скажет мне, когда я указал конфликтующие атрибуты в одном правиле. (Я еще не пробовал, но я поймите, что версия 8 имеет еще лучшую поддержку GWT, например, синхронизацию" локальных "и" асинхронных " интерфейсов RPC и реализаций.)
GWT 2.0, который должен выйти где-то в ближайшие несколько месяцев, решает многие обсуждаемые вопросы.
- создание макетов с помощью html / xml, как синтаксис
- динамическая загрузка скрипта-только основные JS будут загружены изначально. Остальные будут загружены по мере необходимости
- in-Browser Hosted Mode-это может позаботиться о проблемах скорости хостинга, обсуждаемых среди других преимуществ
- "Оптимизация Компилятора" - Быстрее компиляция, надеюсь
Не "невозможно преодолеть", но немного боли для чего-то основного.
Дата обращения:
GWT использует устаревший
java.util.Date
Что может привести к неожиданному поведению при работе с датами на стороне клиента.java.util.Calendar
Не поддерживается GWT. подробнее здесь.проблемы, связанные примера:
Я добавлю несколько пунктов к уже упомянутым:
- привязка данных/проверки. GWT не имеет поддержки привязки/проверки данных из коробки, хотя в этой области начинают появляться некоторые проекты. Вы обнаружите, что пишете много об этом:
TextField fname, faddress; ... fname.setText(person.getName()); faddress.setText(person.getAddress()); ...
- отложенная загрузка. Поскольку gwt находится на стороне клиента, ленивая загрузка действительно не вариант. Вам нужно будет тщательно разработать свои RPC и доменные объекты, чтобы
- отправить все данные объекта, которые необходимы
- избегайте нетерпеливого извлечения всех ваших данных
- вы также должны убедиться, что вы не будете отправлять прокси/не сериализуемые объекты. hibernate4gwt может помочь вам с этими пунктами.
- дизайн пользовательского интерфейса. Визуализировать пользовательский интерфейс в java (панели, кнопки и т. д.) сложнее, чем в html.
- поддержка истории. GWT не поставляется с подсистемой истории, и она не поставляется с любой подсистемой для хороших URL-адресов или статусных закладок. Вам придется свернуть свой собственный (хотя он имеет поддержку маркеров истории, что является началом). Это происходит со всеми инструментариями, насколько мне известно, "Аякс".
IMHO, GWT отсутствует структура, которая имеет поддержку из коробки для всех проблем, упомянутых в этом "потоке".
Я сейчас работаю над проектом, который использует EXT GWT (GXT), чтобы не путать с GWT EXT. Есть разница, EXT GWT-это тот, который фактически производится компанией, которая написала ExtJS библиотеку javascript. GWT EXT-это оболочка GWT вокруг библиотеки ExtJS. GXT-это родной GWT.
в любом случае, GXT все еще несколько незрелый и не имеет твердого сообщества, которое, как я чувствую, имеет GWT EXT. Тем не менее, Будущее за GXT, поскольку это родной GWT и фактически разработанный компания, которая сделала ExtJS. GWT EXT несколько искалечен, поскольку лицензия изменилась на библиотеке ExtJS, таким образом замедляя развитие GWT EXT.
в целом, я думаю, что GWT / GXT является хорошим решением для разработки веб-приложения. Мне на самом деле очень нравится режим хостинга для разработки, он делает все быстро и легко. Вы также получаете преимущество, которое позволяет отлаживать код, а также. Модульные тесты с JUnit также довольно прочны. Я еще не видел отличного модульного тестирования JavaScript фреймворк, который я чувствовал, был достаточно зрелым для тестирования корпоративного приложения.
для получения дополнительной информации о GWT EXT: http://gwt-ext.com/
для получения дополнительной информации о EXT GWT (GXT): http://extjs.com/products/gxt/
нет серьезных подводных камней, которые я не смог преодолеть легко. Используйте режим хостинга сильно. Поскольку вы используете GWT-ext, вам почти никогда не нужно будет касаться CSS самостоятельно, если вы не хотите настроить внешний вид коробки.
моя рекомендация-использовать виджет GWT "родной" над библиотекой, где они близки по функциям.
Re индексация поисковой системы: да сайт не будет иметь навигационные URL-адреса обычно (если вы только не добавляете виджеты к элементам a обычный веб-сайт). Вы можете сделать историю назад/вперед функциональность, хотя.
Я использовал GWT и GWT-ext вместе на проекте некоторое время назад. Я нашел опыт довольно гладко, как веб-разработка идет, но мой совет будет таков:
Не смешивайте собственные виджеты GWT с виджетами EXT. Это сбивает с толку, как ад, так как обычно имена одинаковы (GWT.Кнопка или GWText.Баттон?)
одна вещь, которая произошла со мной, что действительно сделало код более сложным, чем я хотел бы, было то, что я хотел панель, которая была а) динамически обновляемый б) каскадируемый
родной панели GWT и динамичны, внутр панели каскадирование. Решение? В УГВ.VerticalPanel обертывание панели GWTExt... Бардак. :)
но эй, это работает. ;)
Я второй комментарий от ykagano, самым большим недостатком является потеря V в MVC. Хотя вы можете отделить истинный класс пользовательского интерфейса от остальной части кода на стороне клиента, вы не можете легко использовать HTML-страницу, созданную графическим/веб-дизайнером. Это означает, что вам нужен разработчик для перевода HTML на java.
получить визуальный редактор пользовательского интерфейса, это сэкономит вам много времени. Я использую GWTDesigner.
самый большой плюс GWT - это возможность забыть о проблемах с кросс-браузером. Его не 100%, но забирает почти всю эту боль. В сочетании с преимуществом отладки в режиме хостинга (в отличие от Firebug, который отлично, но не то же самое, что отладчик java) он дает разработчику огромное преимущество в создании сложных приложений ajax.
О и его быстро во время выполнения, особенно если вы используете фильтр gzip.
немного не по теме, но канал #gwt на irc очень полезен, в случае, если у вас есть постоянная проблема.
GWT довольно прямолинейный и интуитивно понятный.
особенно с выпуском UIBinder, чтобы виджеты GWT были выложены в XML, а затем закодированы в Java.
поэтому, если вы использовали другие инструменты проектирования Ajax или Flash, или Silverlight и т. д., GWT очень легко узнать.
главным препятствием, если не ловушкой, является GWT RPC. Сама причина, по которой вы хотите использовать GWT, связана с асинхронным RPC GWT. В противном случае, почему бы просто не положиться на CSS для форматирования страницы?
GWT RPC-это тот элемент, который позволяет вашему серверу обновлять данные на вашем сервере без необходимости обновлять страницу. Это абсолютное требование для таких страниц, как мониторинг производительности акций (или текущий национальный и государственный долг США или количество нерожденных детей, прерванных во всем мире вторым).
GWT RPC требует некоторых усилий, чтобы понять, но учитывая несколько часов, все должно быть ясно.
выше этого, приложив некоторые усилия чтобы изучить GWT RPC, Вы, наконец, обнаружите, что вы не можете использовать JSP в качестве компонента службы для RPC, если только ... У меня есть серия из 8 частей (я думаю) в моем блоге о том, как использовать JSP в качестве сервиса GWT RPC. Однако, поскольку вы не просили ответов, а просто вопросы, я воздержусь от рекламы моего блога.
Так. Я очень верю, что худшие препятствия/подводные камни для использования GWT-это выяснить, как правильно развернуть GWT async RPC и как разрешить ему использовать JSP-сервисеры.
нам было очень трудно жениться на нашей кодовой базе GWT с веб-шаблонами HTML, которые мы получили от веб-дизайнера (статические HTML-страницы с конкретными идентификаторами div, которыми мы хотели управлять GWT). По крайней мере, когда мы его использовали, мы не могли заставить GWT интегрироваться с частями нашего веб-сайта, которые не были закодированы в GWT. В конце концов, у нас это получилось, но это был большой взлом.
- асинхронный интерфейс, который вы должны написать для каждого интерфейса службы, выглядит как то, что могло быть автоматически сгенерировано компилятором GWT.
- время компиляции становится длинным для больших проектов
но для большого проекта Javascript это лучший выбор
GWT 2.4 исправил многие из вышеупомянутых проблем, и отличная библиотека виджетов только что вышла из бета-версии (Ext GWT 3.0.4 a.k.a. GXT), которая полностью написана в GWT, а не в оболочке JS lib.
остальные боли:
- отсутствие поддержки селектора CSS3, вы можете использовать "literal()" в некоторых случаях, чтобы обойти его.
- отсутствие поддержки CSS3 и современных событий браузера, таких как transitionEnd.
- отсутствие календаря Java поддержка класса (много лет спустя).
- отсутствие поддержки JUnit4 (5 лет).
- отсутствие четкой дорожной карты и графика выпуска от команды Google GWT.
относительно ГВт 2.4, Используйте Firefox при отладке GWT, это намного быстрее, чем с помощью chrome. И если вы будете использовать только firefox, подумайте о том, чтобы поместить эту строку в свой .ГВт.xml file
<set-property name="user.agent" value="gecko1_8" />
кроме того, если вы используете eclipse, добавьте следующие аргументы в разделе аргументы -> VM:
- Xmx512m-XX: MaxPermSize=1024m-XX: PermSize=1024m
вы можете разделить ваш сервер и клиент, и использовать следующие в разделе аргументы - > аргументы программы: - codeServerPort 9997-startupUrl http://yourserver/project -noserver
кроме того, чтобы предотвратить обновление вашего сервера при каждом изменении, используйте JRebel http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ А вот и живая демонстрация http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY
одна из основных ошибок заключается в том, что иногда вам нужно явно назначить идентификатор тому, что в конечном итоге становится элементом HTML, чтобы иметь возможность использовать определенные стили CSS. Например: GWT TabPanel будет делать только: наведите указатель мыши на tabBarItems, когда tabBar tabPanel был назначен идентификатор, и вы указываете :наведите указатель мыши на этот элемент.
Я писал о некоторых других недостатки GWT в другом месте, но они уже покрыты rustyshelfs ответ :).
Я сделал много работы на GWT в последнее время, и это то, что я должен сказать:
- CSS стиль сложно только иногда, используйте IE developer tool в IE и firebug в Firefox, чтобы выяснить, что именно происходит, и вы получите четкое представление о том, что css необходимо изменить
- вы можете использовать трюки, чтобы заставить google индексировать его. Очень известный сайт http://examples.roughian.com/ Проверьте свои рейтинги в google. Гораздо менее известный сайт www.salvin.in (не мог удержаться, чтобы не упомянуть об этом), я оптимизировал его до слов: salvin home page (поиск google для этих трех слов)
Я мало что знаю о GWT-EXT, но я тоже считаю, что нет необходимости включать сторонние библиотеки.
удачи в вашем решении:)
GWT делает браузер нюхает вместо обнаружения функций, и ваше приложение не будет работать на некоторых браузерах (особенно новых)
вот некоторые ссылки на проблему:
- google-web-toolkit выпуск 2938: RFE: улучшение пользователя.свойство агента-провайдера справится для userAgent строка "маскировка"
- Iceweasel больше не поддерживается? - Google Docs Help
- реализации GWT для каждого браузер
вот некоторые ссылки на обнаружение функций:
- обнаружение браузера (и что делать вместо этого)
- обнаружение функций: современные сценарии браузера
- Обнаружение Функций Браузера
извлеченные из сравнение JavaScript фреймворков-Wikipedia
команда GWT сделала много больших улучшений в прошлом году, выпустив GWT 2.7. Одним из основных недостатков GWT было то, что компиляция занимает много времени в GWT 2.6 и ниже. Теперь это ушло GWT не имеет инкрементной компиляции, которая является супер быстрой и компилирует только изменения.
GWT 2.7 теперь имеет (источник):
- инкрементные сборки теперь всего за несколько секунд
- более компактные, более точные исходные карты
- GSS поддержка
- JSInterop
- Отличная Производительность JavaScript
- Меньший Размер Кода
лучший способ получить достоверные факты от опрос УГВ. Одной из самых больших проблем с GWT всегда было долгое время компиляции. К счастью, это улучшается очень быстро, так что это не будет существенной проблемой в ближайшем будущем. Еще одна ловушка заключается в том, что GWT значительно сложнее, потому что Java-это более сложный язык, который сопротивляется плохим кодерам на каждом шагу. Кроме того, компиляция добавляет слой. Например, JS interop требует небольшого шаблона. Основная проблема заключается в том, что GWT не был разработан, чтобы быть простым. Он был разработан с нуля для чрезвычайно сложных веб-приложений, и все сообщество последовательно ставит приоритеты, производительность, качество кода, архитектуру и т. д. над простым кодированием.
Помните, что вы можете использовать js в GWT в любой момент, поэтому, если вы боретесь с GWT, рассмотрите возможность использования js. В конце дня GWT - это js, поэтому вы можете делать все, что можете в GWT, что можете в js. В самом деле, большинство проектов необходимо использовать JS. Проблема этот GWT значительно сложнее. Тем не менее, иногда это стоит дополнительных сложностей.стоит отметить, что GWT 3.0 принесет значительные улучшения.
повторное использование объектов Службы RPC.
Это вызывает условия гонки с симптомами, которые выглядят как приложение висит.
подводные камни я столкнулся 1. Различное поведение в режиме сверхсветовой. Например, Someclass.класс.getName () работает абсолютно нормально в режиме Superdev и возвращает полное имя класса. В производительном режиме это не работает.
- addWidget (widget) вызовет removefromparent виджета ()
GWT-это технологический шедевр. Он объединяет клиентское и серверное программирование, делая его одним согласованным приложением-так, как программное обеспечение было написано до "наслоения", и так, как оно должно быть написано. Он устраняет различные наборы навыков, недопонимание между членами команды и, как правило, весь этап веб-дизайна: как художественный, так и программирование. И это самое близкое, что вы получите для мобильных устройств, например, для разработки Android. На самом деле GWT был разработан для создания различных собственных UIs, а не только HTML. Хотя это требует огромной дисциплины, чтобы обеспечить такую развязку-чтобы сохранить ваши внутренние слои презентации-агностик.
первая ошибка, которую вы должны избегать, которая заняла у меня четыре года, чтобы понять, использует сторонние расширения, такие как EXT-GWT aka GXT и SmartGWT. Очень заманчиво начать использовать свои красивые виджеты desktopish вместо того, чтобы инвестировать в свой собственный стиль, но я не могу сказать, сколько проблем у меня было с SmartGWT, пока я, наконец, не устал. Короче говоря, он замораживает ядро GWT набор функций на определенном (довольно устаревшем) уровне, а затем строится поверх него. Также имейте в виду, что точеный внешний вид рабочего стола выглядит глупо в наши дни, не говоря уже о вялой производительности, тоннах ошибок и функциях совместимости - особенно на мобильных устройствах. Вы хотите оставаться как можно ближе к собственным элементам управления браузера, т. е. выпадающие списки отображаются как собственные элементы
благодаря мобильным тенденциям весь UX становится проще и лестнее, так что вам не нужно делать много, чтобы стиль острый вид приложения. Хотя, если вы хотите" 3D " взгляд, есть также градиенты. CSS3 сделал все легко, и GWT обертывает его элегантным объектно-ориентированным способом в отличие от raw CSS. Так что не расстраивайтесь, глядя на довольно уродливые элементы управления barebones в витрине GWT. Команда GWT намеренно не предлагала никакого стиля, потому что это работа разработчика.
остальное-это в значительной степени обычное программирование браузера строго типизированная Java с красивыми лаконичными API. Но, конечно, никогда не забывая, что ваш код работает внутри браузера, поэтому все вызовы асинхронны, например, вы не можете вызывать методы GWT-RPC в цикле (чтобы заполнить некоторый список), но должны рекурсивно цеплять их, если вы когда-либо придете к этой ситуации.
есть некоторые самопровозглашенные "анти-шаблоны", такие как не используйте GWT-RPC. Это было хорошо для меня до сих пор: в течение 10 лет. Простота-это ключ. Я бы и секунды не подумал пожертвовать чем-то предельная производительность для элегантности и ремонтопригодности кода. кроме того, это не там, где ваши узкие места будут в базе данных. Конечно, помните, сколько данных вы отправляете клиенту.
и если вы не можете найти или стиль существующего гаджета - читать богатый набор элементов HTML5, вы всегда можете обернуть сторонний. Я сделал это с помощью jQuery FullCalendar. Совсем не ракетостроение. Все остальное, как Google Maps и Google Charts, имеет полуофициальные обертки GWT.
GWT идеально подходит. Единственная причина, по которой он не получает достаточно любви, заключается в том, что ранние интернет-пользователи, которые все еще влияют на отрасль, не пришли из компьютерных наук и объектно-ориентированных языков, чтобы оценить их. Они имеют либо художественный (Photoshop/WordPress), либо сетевой (Perl/Python) фон.