Самые большие ловушки GWT? [закрыто]


189

Я нахожусь в начале / середине проекта, который мы решили реализовать с использованием GWT. Кто-нибудь сталкивался с какими-либо серьезными ошибками в использовании GWT (и GWT-EXT), которые не удалось преодолеть? Как насчет с точки зрения производительности?

Несколько вещей, которые мы уже видели / слышали, включают в себя:

  • Google не может индексировать контент
  • CSS и стиль в целом кажутся немного странными

Ищите любые дополнительные отзывы по этим пунктам. Спасибо!


4
В последнее время я заметил, что некоторые веб-сайты, основанные на GWT, правильно отображаются в моих результатах поиска в Google, хотя основной HTML не содержит информацию, которую я ищу (examples.roughian.com имеет несколько таких результатов). Похоже, что индексатор Google должен выполнять интеллектуальный рендеринг JavaScript, чтобы выяснить, что будет отображаться на странице после загрузки.
StriplingWarrior

Ответы:


231

Начну с того, что я большой поклонник GWT, но да, есть много подводных камней, но большинство, если не все, мы смогли преодолеть:

Проблема: Длительное время компиляции, так как ваш проект растет, увеличивается количество времени, необходимое для его компиляции. Я слышал о сообщениях о 20-минутных компиляциях, но у меня в среднем около 1 минуты.

Решение: разделите ваш код на отдельные модули и скажите, что ant будет создавать его только после его изменения. Кроме того, во время разработки вы можете значительно сократить время компиляции, создавая только один браузер. Вы можете сделать это, поместив это в свой файл .gwt.xml:

<set-property name="user.agent" value="gecko1_8" />

Где gecko1_8 - это Firefox 2+, т.е. 6 - это 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 довольно компактны.


1
Мы столкнулись с несколькими проблемами, когда различные команды стилей / позиционирования, казалось, не «брали» - стили не использовались там, где они должны были быть, или размер элемента, который, казалось бы, игнорировал запрос на его выполнение на 100%. То же, что и многие обычные вызовы CSS - вполне возможно, много пользовательских ошибок!
Агарцке

@agartzke да, это CSS для вас, и это в основном не имеет ничего общего с GWT. Именно поэтому мы нанимаем высококвалифицированных дизайнеров, чтобы делать такие вещи для нас. Сделать это правильно в 4 разных браузерах никогда не бывает легкой задачей.
ржавая полка

1
В этом году появятся много интересных функций, которые значительно улучшат многие из этих проблем. Хост-режим вне процесса (OOPHM), CssResource (скрытие / минимизация таблицы стилей), UiBinder (он же «Декларативный интерфейс»).
Марк Ренуф

Я с нетерпением жду 2.0, но я должен не согласиться с тем, что GWT является кувалдой. Если это так, то в лучшем случае jQuery и JavaScript - это клочок. Моя точка зрения заключается в том, что я не получаю повторного использования, я заканчиваю копированием многих вещей (скажем: текстовое поле на 4 страницах, которое ведет себя одинаково в каждом месте). Это не значит, что вы должны выбросить все свои старые приложения. Я бы (почти) никогда не использовал GWT для добавления возможностей в существующее html / js-приложение. Также CSS ресурсы находятся в инкубаторе, и они мне нравятся: stackoverflow.com/questions/1066250/gwt-html-file-with-css/… .
Крис Руффало

2
Вы можете повторно использовать JQuery так же, как вы можете повторно использовать GWT, я не думаю, что это правильный аргумент. Они оба поддерживают наследование и могут быть упакованы для повторного использования (файл .jar для GWT, файл .js для JQuery). Я придерживаюсь того, что я сказал, что GWT - кувалда, вы должны кодировать его на Java, вы должны его скомпилировать, у вас есть намного больше вещей, которыми нужно управлять. Если вы хотите сломать кирпичную стену, вы выбираете кувалду. Это не критика, это действительный аргумент. Правильный инструмент для правильной работы.
ржавая полка

54

Мы работаем с GWT почти 2 года. Мы узнали много уроков. Вот что мы думаем:

  1. Не используйте сторонние библиотеки виджетов, особенно gwt-ext. Это убьет вашу производительность отладки, разработки и выполнения. Если у вас есть вопросы о том, как это происходит, свяжитесь со мной напрямую.

  2. Используйте gwt, чтобы заполнять только динамические части ваших приложений. Так что, если у вас есть сложные взаимодействия с пользователем с большим количеством полей. Однако не используйте панели, которые идут с этим. Возьмите имеющиеся у вас готовые дизайнерские страницы. Вырежьте области, которые будут содержать элементы управления для вашего приложения. Присоедините эти элементы управления к странице в onModuleLoad (). Таким образом, вы можете использовать стандартные страницы вашего дизайнера, а также делать все стили за пределами GWT.

  3. Не создавайте приложение целиком как одну стандартную страницу, которая затем динамически создает все части. Если вы сделаете то, что я предлагаю в пункте 2, это все равно не произойдет. Если вы создадите все динамически, вы снизите производительность и потребите огромные объемы памяти для средних и больших приложений. Кроме того, если вы сделаете то, что я предлагаю, кнопка «Назад» будет отлично работать, как и индексирование поисковой системы и т. Д.

Другие комментаторы также имели несколько хороших предложений. Основное правило, которое я использую, заключается в создании страниц, как вы делали стандартную веб-страницу. Затем вырежьте кусочки, которые должны быть динамичными. Замените их элементами с идентификаторами, а затем используйте RootPanel.get( id ).add( widget )для заполнения этих областей.


Я открыл вопрос относительно вашего ответа на stackoverflow.com/q/10025656/138585 . Я буду признателен, если вы посмотрите.
Elad

20

Подводные камни, с которыми мы столкнулись:

  • Несмотря на то, что вы можете получить большую отдачу от использования чего-то вроде GWT EXT, каждый раз, когда вы используете этот вид тонкого шпона поверх библиотеки JavaScript, вы теряете возможность отладки. Я не раз ударил себя по столу, потому что я не могу осмотреть (внутри моего отладчика IntelliJ), что происходит в табличном классе GWT EXT ... Все, что вы можете видеть, это то, что это JavaScriptObject. Это делает довольно сложным выяснить, что пошло не так ...

  • Не имея кого-то в вашей команде, кто знает CSS. Исходя из моего опыта, это не имело значения, что человек не был экспертом ... достаточно того, что у него есть хорошие рабочие знания, и он знает правильные условия, чтобы Google при необходимости.

  • Отладка в разных браузерах. Следите за Out-Process Hosted Mode [ 1 ] [ 2 ] [ 3 ], надеемся, что выйдет в GWT 1.6 ... А пока, вам просто нужно хорошо поработать с hosted mode, затем используйте кнопку «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 "local" и "async".)


18

GWT 2.0, который должен выйти в ближайшие месяцы, решает множество обсуждаемых проблем.

  • Создавайте макеты, используя синтаксис как HTML / XML
  • Динамическая загрузка скриптов - только основные JS будут загружены изначально. Остальные будут загружены по мере необходимости
  • Хост-режим в браузере - это может решить вопросы скорости хост-режима, обсуждаемые, среди прочих преимуществ
  • "Оптимизация компилятора" - надеюсь, более быстрая компиляция

GWT 2.0 Предварительный просмотр видео в Google I / O


15

Не "невозможно преодолеть", но немного боли для чего-то простого.

Обработка даты:

GWT использует устаревшее, java.util.Dateчто может привести к неожиданному поведению при работе с датами на стороне клиента. java.util.Calendarне поддерживается GWT. Больше информации здесь .

Связанные примеры проблем:


1
Два года спустя, и это все еще так. Это остается довольно раздражающим для того, чтобы делать математику даты на клиенте.
Джозеф Ласт

Вопрос в переводе (компиляции) с java.util.CalendarJavaScript. Вы также можете взглянуть на класс GWTCalendarUtil , Как использовать java.util.Calendar в GWT и Как выполнять операции с календарем в Java GWT? Как добавить дни к дате? , Ура;)
olibre

10

Я добавлю некоторые пункты к уже упомянутым:

  • Databinding / проверки. GWT не имеет встроенной поддержки привязки данных / валидации, хотя в этой области начинают появляться некоторые проекты. Вы обнаружите, что пишете много из этого:
TextField fname, faddress;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • Ленивая загрузка. Поскольку gwt на стороне клиента, отложенная загрузка на самом деле не вариант. Вам нужно тщательно спроектировать RPC и доменные объекты, чтобы
    • отправить все данные вашего объекта, которые необходимы
    • Избегайте всех ваших данных
    • Вам также необходимо убедиться, что вы не будете отправлять прокси / несериализуемые объекты. hibernate4gwt может помочь вам с этими точками.
  • Дизайн пользовательского интерфейса. Сложнее визуализировать пользовательский интерфейс в java (панели, кнопки и т. Д.), Чем в html.
  • История поддержки. GWT не поставляется с подсистемой History и не поставляется с какой-либо подсистемой для создания хороших URL-адресов или создания закладок. Вы должны будете бросить свой собственный (хотя он имеет поддержку токенов истории, что является началом). Это происходит со всеми инструментами AJAX AFAIK.

ИМХО, в GWT отсутствует платформа, которая имеет встроенную поддержку для всех проблем, упомянутых в этой «ветке».


GWT поставляется с системой истории, например History.newItem («myItem», false); поместит #myItem в URL, для легкой закладки. Чтобы справиться с тем, кто загружает закладку в ваше приложение, просто используйте History.addValueChangeHandler (myHandlerMethod);
Ztranger

По сути, это не историческая система, это просто механизм записи токенов в URL и обработки уведомлений об изменениях токенов. Вам все равно придется написать весь код приложения для обработки изменений в истории.
Мигель Пинг

9

Я сейчас работаю над проектом, который использует 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/


1
Поскольку этот вопрос все еще активен и набирает голоса, я подумал, что предоставлю обновление. Я полностью отказался от GXT (2009-2010), потому что мне не нравились бизнес-практики Sencha Inc. Затем я впоследствии бросил GWT. Я боялся использовать JavaScript так долго, как ненавижу его. То есть, пока я действительно не понял это. Сейчас я почти исключительно развиваюсь в Node.js / AngularJS. Вбросьте Bootstrap 3, и вы сможете создать потрясающий сайт за гораздо меньшее время, чем GWT. Будущее за JavaScript, чем раньше вы его охватите, тем лучше разработчик.
JP Richardson

Каково ваше мнение сейчас? (просто любопытно) Спасибо.
Акос Лукач

1
@AkosLukacs Я все еще могу сообщить, что я использую JavaScript и люблю каждый его кусочек! Как я уже сказал, я ненавижу JavaScript и, следовательно, почему я выбрал GWT. Реальность такова, что вы не сможете избежать JavaScript, если будете заниматься какой-либо веб-разработкой, так что вы можете также принять его. Я в значительной степени адаптировался к использованию JavaScript для всего (немного отклонился от Go). Что касается моего стека, я использую Node.js / Express / React. Раньше я был большим поклонником Angular и хорошо его знаю, но я не могу рекомендовать Angular 1.x всем, кто начинает с JS, поскольку кривая обучения слишком высока.
JP Richardson

5

Никаких серьезных подводных камней, которые мне так и не удалось легко преодолеть. Используйте режим хостинга интенсивно. Поскольку вы используете GWT-ext, вам почти никогда не придется самостоятельно трогать CSS, если вы не хотите изменить внешний вид.

Я рекомендую использовать «родной» виджет GWT над библиотечным, где они близки по функциям.

Повторная индексация поисковой системы: да, у сайта не будет нормально перемещаемых URL-адресов (если только вы не добавляете виджеты только к элементам обычного веб-сайта). Вы можете сделать историю назад / вперед, хотя функциональность.


4

Я использовал GWT и GWT-ext вместе в проекте некоторое время назад. Я нашел опыт довольно гладким, поскольку веб-разработка идет, но мой совет был бы этим:

Не смешивайте родные виджеты GWT с виджетами EXT. Это чертовски запутанно, поскольку обычно имена совпадают (GWT.Button или GWText.Button?)

Одна вещь, которая случилась со мной, которая действительно сделала код более сложным, чем я хотел, это то, что я хотел панель, которая была бы: а) динамически обновляемой, б) каскадной

Собственные панели GWT являются динамическими, панели Ext - каскадными. Решение? GWT.VerticalPanel, обертывающая панель GWTExt ... Хаос. :)

Но эй, это работает. ;)


4

Я второй комментарий от ykagano, самым большим недостатком является потеря V в MVC. Хотя вы можете отделить истинный класс пользовательского интерфейса от остального кода на стороне клиента, вы не можете легко использовать HTML-страницу, созданную графическим / веб-дизайнером. Это означает, что вам нужен разработчик для перевода HTML в Java.

Получить Wysiwyg UI редактор, это сэкономит вам много времени. Я использую GWTDesigner.

Самым большим преимуществом GWT является возможность забыть о кросс-браузерных проблемах. Это не 100%, но снимает почти всю эту боль. В сочетании с преимуществами отладки в размещенном режиме (в отличие от Firebug, который превосходен, но не совпадает с отладчиком java), он дает разработчику огромное преимущество при создании сложных приложений ajax.

Ох, и это быстро во время выполнения, особенно если вы используете фильтр gzip.


1
Не знал о фильтре gzip - спасибо за этот кусок.
Агарцке

4

Немного не по теме, но канал #gwt на irc очень полезен, если у вас есть постоянная проблема.


В какой сети IRC находится канал?
tovare

Это на freenode (irc.freenode.net). И это на самом деле ## gwt, но вы будете перенаправлены на него, если вы наберете #gwt.
Stian

4

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 - это выяснить, как правильно развернуть асинхронный RPC GWT и как включить в него использование JSP-сервисеров.


Я хотел бы ссылку на ваши статьи блога;)
MS-TG


3

Нам было очень трудно объединить нашу кодовую базу GWT с веб-шаблонами HTML, которые мы получили от веб-дизайнера (статические HTML-страницы с определенными разделениями, которыми мы хотели управлять GWT). По крайней мере, когда мы использовали его, мы не могли заставить GWT интегрироваться с частями нашего сайта, которые не были закодированы в GWT. В конце концов у нас все получилось, но это был большой взлом.


3
  • Асинхронный интерфейс, который вы должны написать для каждого интерфейса службы, выглядит как нечто, что могло бы быть автоматически сгенерировано компилятором GWT.
  • Время компиляции становится большим для больших проектов

Но для большого проекта Javascript это лучший выбор


3

GWT 2.4 исправил многие из вышеупомянутых проблем, и отличная библиотека виджетов только что вышла из бета-версии (Ext GWT 3.0.4 или GXT), которая полностью написана на GWT, а не на оболочке JS-библиотеки.

Оставшаяся боль:

  • Отсутствие поддержки селектора CSS3, вы можете использовать «literal ()» в некоторых случаях, чтобы обойти это.
  • Отсутствие поддержки CSS3 и современных событий браузера, таких как transitionEnd .
  • Отсутствие поддержки класса Java Calendar (много лет спустя).
  • Отсутствие поддержки JUnit4 (5 лет и более).
  • Отсутствие четкой дорожной карты и графика выпуска от команды Google GWT.

2

Что касается GWT 2.4, используйте Firefox при отладке GWT, это намного быстрее, чем с помощью Chrome. И если вы будете использовать только Firefox, подумайте над тем, чтобы поместить эту строку в ваш файл project.gwt.xml.

<set-property name="user.agent" value="gecko1_8" />

Кроме того, если вы используете eclipse, добавьте следующее в аргументы -> Аргументы VM:

-Xmx512m -XX: MaxPermSize = 1024 м -XX: PermSize = 1024 м

Вы можете разделить ваш сервер и клиент и использовать следующие аргументы -> Программные аргументы: -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


1

Одна серьезная ошибка заключается в том, что иногда вам необходимо явно назначить идентификатор тому, что в конечном итоге становится элементом HTML, чтобы иметь возможность использовать определенные стили CSS. Например: GWT TabPanel будет делать: hover over tabBarItems, когда tabBar tabPanel был назначен идентификатор, и вы указываете: hover для этого elementId.

Я писал о некоторых других недостатках GWT в другом месте, но они уже покрыты ответом rustyshelfs :).


Как правило, назначение идентификаторов не является плохой вещью, если вы планируете проводить тестирование с использованием Selenium.
Петтери Хиетавирта

1

Недавно я проделал большую работу над GWT, и вот что я должен сказать:

  1. CSS-стилизация бывает непростой, иногда используйте инструмент разработчика IE в IE и firebug в Firefox, чтобы выяснить, что именно происходит, и вы получите четкое представление о том, что CSS нужно изменить
  2. Вы можете использовать трюки, чтобы заставить Google индексировать его. Очень известный сайт http://examples.roughian.com/ проверяет его рейтинг в Google. Гораздо менее известный сайт www.salvin.in (не могу не упомянуть об этом), я оптимизировал его для слов: salvin home page (поищите в Google эти три слова)

Я не знаю много о GWT-EXT, но я также убежден, что нет необходимости включать сторонние библиотеки.

Желаем удачи в вашем решении :)


1

1

Команда GWT сделала много значительных улучшений по сравнению с прошлым годом, выпустив GWT 2.7. Одним из основных недостатков GWT было то, что компиляция занимает много времени в GWT 2.6 и ниже. Теперь этого нет, у GWT нет инкрементальной компиляции, которая очень быстрая и компилирует только изменения.

GWT 2.7 теперь имеет ( Источник ):

  • Инкрементные сборки теперь всего за секунды
  • Более компактные, более точные исходные карты
  • Поддержка GSS
  • JSInterop
  • Отличная производительность JavaScript
  • Меньший размер кода

1

Лучший способ получить достоверные факты из опроса gwt . Одной из самых больших проблем с GWT всегда было долгое время компиляции. К счастью, он очень быстро улучшается, поэтому в ближайшем будущем это не станет серьезной проблемой. Еще один недостаток в том, что GWT значительно сложнее, потому что Java - более сложный язык, который сопротивляется плохим программистам на каждом этапе пути. Кроме того, компиляция добавляет слой. Например, для js interop требуется небольшой пример. Основная проблема заключается в том, что GWT не был разработан, чтобы быть простым. Он был разработан с нуля для чрезвычайно сложных веб-приложений, и все сообщество последовательно расставляет приоритеты, производительность, качество кода, архитектуру и т. Д. Над простым кодированием.
Помните, что вы можете использовать js в GWT в любой момент, поэтому, если вы боретесь с GWT, подумайте об использовании js. В конце дня GWT - это js, поэтому в GWT вы можете делать все, что можете в js. Фактически, большинство проектов GWT используют js. Проблема в том, что GWT значительно сложнее. Тем не менее, иногда это стоит дополнительной сложности.

Стоит отметить, что GWT 3.0 принесет значительные улучшения.


0

Повторное использование сервисных объектов RPC.
Это вызывает состояние гонки с симптомами, которые выглядят как зависание приложения.


Энтони, не могли бы вы уточнить это? Я делаю RPC-вызов на сервер и ожидаю, что графический интерфейс будет реагировать до тех пор, пока запрос не вернется, но он зависает.
Бретт Ханна

0

Подводные камни, с которыми я столкнулся 1. Различное поведение в режиме superdev. Например, Someclass.class.getName () прекрасно работает в режиме Superdev и возвращает полное имя класса. В производительном режиме это не работает.

  1. addWidget (виджет) вызовет метод removefromparent () виджета

0

GWT - это технологический шедевр. Он объединяет клиентское и серверное программирование, делая его единым приложением - как программное обеспечение было написано до «наслоения», и как оно должно быть написано. Это устраняет различные наборы навыков, недопонимание между членами команды и вообще весь этап веб-дизайна: как художественный, так и программный. И это ближе всего к мобильному, например, разработка Android. Фактически GWT был разработан для генерации различных собственных интерфейсов, а не только HTML. Хотя это требует огромной дисциплины, чтобы обеспечить такое разделение - чтобы сохранить свои внутренние слои презентационными.

Первая ошибка, которую вам следует избегать, на что мне потребовалось четыре года, - это использование сторонних расширений, таких как EXT-GWT или GXT и SmartGWT. Очень заманчиво начать использовать их симпатичные десктопные виджеты вместо того, чтобы вкладывать средства в собственный стиль, но я не могу сказать, сколько у меня было проблем с SmartGWT, пока я, наконец, не сыт по горло. Короче говоря, он замораживает основной набор функций GWT на определенном (довольно устаревшем) уровне, а затем строит поверх него. Также имейте в виду, что точеный внешний вид рабочего стола выглядит глупо в наше время, не говоря уже о вялой производительности, тоннах ошибок и функциях совместимости - особенно на мобильных устройствах. Вы хотите оставаться как можно ближе к нативным элементам управления браузера, то есть к раскрывающимся спискам, отображаемым как нативные элементы <select>, а не к каким-то элементам управления, нарисованным пользователем.

Благодаря мобильным тенденциям весь UX становится более простым и плоским, так что вам не нужно много делать, чтобы придать стилю острое приложение. Хотя, если вы хотите «3D» смотреть, есть и градиенты. С CSS3 все стало проще, и GWT оборачивает это элегантным объектно-ориентированным способом в отличие от необработанного CSS. Так что не расстраивайтесь, глядя на довольно уродливые элементы управления barebones в GWT Showcase. Команда GWT намеренно не предложила никакого стиля, потому что это работа разработчика.

Все остальное - обычное программирование браузера в строго типизированной Java с красивыми лаконичными API. Но, конечно, никогда не забывайте, что ваш код выполняется внутри браузера, поэтому все вызовы являются асинхронными, например, вы не можете вызывать методы GWT-RPC в цикле (для заполнения какого-либо списка), но вам нужно рекурсивно связывать их, если вы когда-нибудь придете к этому. ситуация.

Есть некоторые самопровозглашенные «анти-паттерны», такие как не использовать GWT-RPC. Это было хорошо для меня до сих пор: в течение 10 лет. Простота является ключевым. Я бы не подумал ни на секунду пожертвовать некоторой предельной производительностью ради элегантности кода и удобства сопровождения. кроме того, это не то, где ваши узкие места будут - в базе данных. Конечно, не забывайте, сколько данных вы отправляете клиенту.

И если вы не можете найти или стилизовать существующий гаджет - читайте богатый набор элементов HTML5, вы всегда можете обернуть сторонний. Я сделал это с помощью популярного jQuery FullCalendar. Не ракетостроение вообще. Все остальное, например, Google Maps и Google Charts, имеет полуофициальные обертки GWT.

GWT идеально подходит. Единственная причина, по которой он не получает достаточного количества любви, заключается в том, что первые интернет-пользователи, которые все еще влияют на индустрию, не пришли из компьютерных наук и объектно-ориентированных языков, чтобы оценить их. Они имеют художественный (Photoshop / WordPress) или сетевой (Perl / Python) фон.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.