Ответ 1
Компромиссы
Начнем со всех компромиссов, которые я могу придумать:
- вы используете Java. Это означает, что знание вашего webdevs в javascript не пригодится (это будет полезно, если вы будете спотыкаться в JSNI).
- проблемы с индексацией поисковыми системами - IMHO, это должно быть
самый большой недостаток использования GWT или
чистых веб-приложений JS в целом.
Поскольку содержание, макет, все
создается "на лету" с помощью JS,
поисковая система увидит
короткая HTML-страница, и что это - вы
должны как-то позаботиться об этом
(например, используя
cloaking). Наконец, Google
начал работать над решением для
это, однако, похоже,
привлекательный для меня.
Обновление: Google наконец-то решил эту проблему. Тем не менее, я оставлю это как компромисс, потому что для приложения, которое требуется сшивать, требуется больше усилий, чем в других рамках. По крайней мере, сейчас у нас есть "стандарт", которым нужно следовать и не нужно использовать некоторые сомнительные методы (например, cloaking). - Это легко (особенно для новичков в GWT, особенно когда этот человек исходит из фона HTML/JS - без особого объектно-ориентированного опыта), чтобы пойти на все "ничего себе, эти" объекты "так круты, позвольте мне сделайте все мои
<div>
в отдельные объекты, что сделает код приятным и аккуратным". Конечно, я чрезмерно преувеличиваю, но вы понимаете, что легко представить, что неопытный программист мог бы поставить полномасштабныйWidget
с большим количествомHandlers
в каждой ячейкеFlexTable
... И затем (а) он потратит много времени на то, чтобы понять, почему приложение кажется вялым;) tl; dr: для начинающих в GWT легко сделать их приложения "раздутыми", написав код, который кажется в соответствии с что документация/образцы/здравый смысл;) предлагают
Это все для компромиссов, о которых я могу думать - если кто-то хочет что-то добавить, добавьте комментарии.
Преимущества
Теперь о преимуществах. Я пропущу некоторые как интернационализация, кросс-браузерная совместимость для бесплатной, простой интеграции с другими библиотеками Google и т.д., потому что они очевидны и понятны. Я постараюсь сосредоточиться на менее подчеркнутых, но все же очень важных особенностях:
- компилятор - теперь большинство людей, с которыми я говорил о GWT, не осознают, насколько удивительна эта часть GWT - для начала попробуйте this презентация с прошлого года Google IO. Компилятор имеет представление о все приложение.
Таким образом, он может оптимизировать следующее:
public class ShapeExample implements EntryPoint {
private static final double SIDE_LEN_SMALL = 2;
private final Shape shape = new SmallSquare();
public static abstract class Shape {
public abstract double getArea();
}
public static abstract class Square extends Shape {
public double getArea() { return getSideLength() * getSideLength(); }
public abstract double getSideLength();
}
public static class SmallSquare extends Square {
public double getSideLength() { return SIDE_LEN_SMALL; }
}
public void onModuleLoad() {
Shape shape = getShape();
Window.alert("Area is " + shape.getArea());
}
private Shape getShape() { return shape; }
}
.. к этому:
public class ShapeExample implements EntryPoint {
public void onModuleLoad() {
Window.alert("Area is 4.0");
}
}
И затем обфускайте это и свести к минимуму. Кроме того, это делается таким образом, что делает результирующие файлы более сжимаемыми через gzip.
- вы используете Java - нравится вам Java или нет, нет никаких отрицаний что он очень хороший объектно-ориентированный язык, который позволяет легко писать и тестировать код (я не думаю, что это возможно до такой степени с использованием JavaScript). Если вы следуете некоторым хорошим рекомендациям, вы придете к коду, который понятно не только для вас, но для других разработчиков. Другая стоит упомянуть, что все эти приятные шаблоны дизайна и т.д., что работа в "чистой" Java, работа здесь тоже.
- Одна из замечательных вещей о GWT заключается в том, что вы получить прирост производительности и новый функции бесплатно с почти каждым новый выпуск фреймворка. поскольку это Java, скомпилированный для JavaScript, это берет только перекомпилировать из оптимизаций, сделанных в новый компилятор или получить новые функции (например, поддержка доступности, представленная в GWT 1.5).
- отладка - стоит упомянуть, что вы можете (и должны:)) отлаживать свои приложения GWT так же, как и любое другое приложение Java, используя ваш отладчик IDE. И, в общем, отладчики Java, которые я видел, более продвинуты, чем их аналогий JavaScript.
- UiBinder - пока он еще не "отлично", UiBinderпозволяют создавать ваши Widgets простым и интуитивно понятным способом с использованием XML (в отличие от способа до 2.0, который заставлял вас делать это на Java). Смешивание HTML и GWT Widgets никогда не было таким простым и забавным;)
- работа с CSS - GWT всегда, конечно, обнял CSS, но с введением GWT 2.0 (и UiBinder) они перешли на другой уровень. Давайте посмотрим на файл CSS из "обычного" веб-приложения - сотни, если не тысячи строк, трудно ориентироваться, некоторые стили избыточны, но трудно заметить, что некоторые из них вообще не используются, добавьте в этот микс нужно порадовать IE6/7, и вы получите кошмар. С помощью GWT вы можете поручить ему выполнить аналогичные задачи, которые он выполнял для JS-кода для CSS, - поэтому он обрезает все неиспользованные стили CSS, объединит там, где это необходимо, минимизирует и обфускает имена классов, и многие другие (включая условные обозначения, константы и т.д. в ваших файлах CSS). Вам рекомендуется сохранять свои стили в своих соответствующих файлах UiBinder XML - упрощает организацию и поиск их. И последнее, но не менее важное: вы получаете сообщение об ошибке при пропуске имени стиля CSS - меньше хлопот, а затем пытаетесь сделать то же самое через Firebug или аналогичный инструмент.
- OOPHM - вне хостинга в процессе, они зафиксировали один из самых больших недостатков GWT - теперь вы можете использовать Hosted Mode в браузере по вашему выбору (если этот выбор Firefox, Safari, IE или Chrome, но по крайней мере вы можете использовать любую желаемую версию). Дизайн OOPHM также позволяет вам делать классные вещи, такие как запуск Windows в виртуальной машине, и подключаться из IE туда в Hosted Mode, работающий на ОС хоста (Linux/MacOS) - нет необходимости в хаках, копировании файлов после каждого компиляции, и т.д.
- вы можете сказать/ɡwɪt/много;) (это цитата из одного из презентаций на Google IO 2009, IIRC)
- еще много. Посмотрите видео из Google IO 2009 и просмотрите GWT wiki, чтобы увидеть больше вещей, которые делают создание RIA более легким и менее подверженным ошибкам с помощью GWT:)
Между
В зависимости от вашего опыта и/или предпочтений, преимущество может быть следующим (это для меня, но порой это PITA;)) или нет:
- коллекция виджетах остается маленькой и простой. Теперь, если вы исходите из какой-то полномасштабной инфраструктуры графического интерфейса (будь то веб-сайт или рабочий стол), вы можете быть удивлены тем, насколько относительно небольшое количество Widgets GWT. Но, по словам разработчиков GWT, это было сделано специально для этого - базовые Виджеты - это все инструменты/ "блоки", которые вам нужны, чтобы создать свои собственные, настроенные для ваших нужд Виджеты. Альтернативой является предоставление разнообразных универсальных виджетам, которые должны поддерживать многие прецеденты... Результатом является вялый пользовательский интерфейс (по крайней мере, IMHO - проверьте сами проекты, такие как SmartGWT или Ext GWT). То есть Виджеты GWT довольно хорошо написаны - например,
SuggestBox
имеет много мест, где вы можете переопределить поведение по умолчанию с помощью ваш собственный - вы можете указать другой способ отображения предложений (SuggestBox.SuggestionDisplay
), запускать пользовательское действие, когда пользователь выбирает предложение (SuggestBox.SuggestionCallback
) или просто предоставить пользовательскийSuggestOracle
для подаваяSuggestBox
Suggestion
s...
Нижняя строка - попробуйте GWT, скорее всего, вы полюбите ее и никогда больше не захотите писать в чистом JavaScript;)