Google Web Toolkit анализ

Автор: Eugeniy Marilev
Дата публикации: 2014-05-06 10:20:16

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

Если вам кто-то подсказал, посоветовал, или же вы сами решили... остановили свой взор на технологии Google Web Toolkit c использованием Java, то эта статья — для вас, и я настоятельно советую вам её прочитать. Установка и настройка окружения для разработки на Google Web Toolkit (GWT) довольно проста. Вот пример для Ubuntu Linux (11.04):

Далее немного теории и тезисов. GWT — это технология, которая позволяет конвертировать код написанный на языке Java в Javascript код. Google утверждает, что их компилятор в результате конвертации отдает наиболее оптимальный и маловесный JavaScript, лучше чем мог написать любой Javascript-разработчик, даже при условии, что написанный код будет минимизирован каким-либо javascript минификатором, например, jscompress.com), а также, что код скомпилированный с помощью GWT будет абсолютно кроссбраузерным (Internet Explorer, Chrome, Opera, Firefox, Safari) - cмотри здесь. Рассмотрим по порядку все вышеперечисленные критерии, что позволит сделать нам полноценные выводы.

Дешевизна

В первую очередь здесь хотелось бы сказать, что вам придется попотеть, чтобы найти толковых разработчиков с большим опытом работы с GWT, по умеренной цене. Вопрос почему? Да потому - так уж сложилось, что Java-разработчики пожинают сладкий плод кроссплатформенности технологии Java, хотя по большому счету программирование на данном языке гораздо проще, чем, например, на C++, C#, Objective C. Разработка на данной технологии гораздо более трудоемкая и поглощает довольно много времени, которые программист может, скажем тратить на то, чтобы заваривать себе чай каждые полчаса. Происходит это потому, что чтобы посмотреть и тестировать разработанную логику нужно подождать пока все компилируется. Скажем так, на более-менее крупном проекте это будет занимать от 2-5 минут времени на довольно мощном компьютере с двухъядерным процессором.

Широкие возможности

Что касается широких возможностей, здесь по всей видимости, лучшим ходом будет сравнить GWT с jQuery. Мы конечно не будем обсуждать всю мощь сторонних библиотек написанных на Java — нам сейчас важно обсудить мощность технологии по работе с динамикой веб-страниц. Предлагаю на рассмотрение следующие примеры кода, в которых, допустим нужно всем ячейкам второго столбца таблицы с id = mytable сделать выравнивание внутреннего текста по правой границе: GWT:

int columnIndex = 1;
Element table = DOM.getElementById(«mytable»);
NodeList list = table.getElementsByTagName(«tbody»);
Element body = (Element)list.getItem(0);
NodeList rows = body.getChildNodes();
for (int i = 0; i < rows.getLength(); ++i) {
     cell = (Element)rows.getItem(i).getChild(columnIndex);
     DOM.setStyleAttribute((com.google.gwt.user.client.Element)cell, "text-align", "right");
}

jQuery:

$('#mytable tbody tr td:eq(1)').css({«text-align»: «right»});

Производительность

Что касается производительности, то здесь можно сказать о том, что этот факт больше всего зависит от головы разработчика и написанного им кода. Конечно, код написанный на чистом Javascript немного производительней, чем на jQuery, но комбинируя мощность jQuery с производительностью чистого Javascript можно достичь идеального результата. GWT в свою очередь генерирует код на чистом JavaScript. Полученный код практически полная копия кода, написанного на Java, но хитро минимизированного. Полученный код направлен сугубо на решение конкретной задачи, и если таких задач становиться довольно много, то кода генерируется очень много, и тут никакое сжатие не поможет. JQuery же решает проблему рутинного кода на корню, выражения предельно ясны и короткие до предела. После минимизации, еще короче на 30%-50%. Так что это миф о том, что Javascript-код GWT намного быстрее и занимает минимум места.

Кроссплатформенность

Очень громкое заявление о кроссплатформенности GWT... Я проверил только на самых распространенных браузерах:

  1. Chromium — нужен специальный плагин.
  2. Internet Explorer — не корректно отрабатывает код по работе с DOM.
  3. Safari — не работает.
  4. Firefox — здесь все в норме.

Как видите, все не так гладко, как описано в документации Google. Самый простой пример, это некорректность работы кода с различными DOM моделями браузеров. Например, для Firefox — у любой таблицы добавляется tbody, даже если разработчик упустил. Для браузеров Internet Explorer, Chromium это не так. Поэтому вышеприведенный пример кода нужно будет модернизировать так, чтобы в случае отсутствия «tbody» строки искались сразу внутри тега «table». Проблему кроссплатформенности Javascript и DOM моделей гораздо элегантнее решена в jQuery.

Легкость поддержки

Поддержка всегда сложный процесс, так как приходиться редактировать код написанный очень давно тобой, а еще хуже, если кем-то другим. Поэтому легкость поддержки проектов на любых технологиях зависит только от правильности проектирования и сложности системы. Плюсы jQuery здесь в том, что код короче и гораздо читабельнее. GWT здесь может похвастаться использованием паттерна MVC, тогда как большинство виджетов jQuery являются одновременно и моделями, и представлениями, и контроллерами. Но и это зависит тоже от разработчиков, т.к. использовать MVC можно и на чистом JavaScript. Тут уже кто как привык:)

Заключение

Как вывод из всего вышесказанного хочу сказать — не тратьте свои деньги и время на разработку веб-приложений c использованием GWT. Используйте лучшие и проверенные временем, передовые технологии. Удачного выбора...

Комментарии к статье
Комментарии:
Jurius
19\04\2012
Это чудовищный сборник дремучих заблуждений. Код на GWT целенаправленно компилируется только один раз, остальное время используется hosted-режим, в котором проект обновляется автоматически раз в секунду в том же эклипсе при сохранении изменений. Hosted-режим великолепно работает вместе со Spring. На выходе после компиляции вы получаете полноценное оттестированное приложение, а не набор несвязанных скриптов. По широким возможностям: вы приводите тотально неверный пример. За такой код на jquery в полноценном веб-приложении нужно отрывать ручки и срочно увольнять разработчика, потому что он смешивает в одну непереваримую кашу селекторы и их стили. Основная задача - описать правила присвоения свойств, либо поведение таблиц, ячеек и т.п. как объектов во взаимосвязи с данными. И я вас уверяю, когда вы наконец забудете про "простоту" jquery и захотите сделать по-настоящему масштабируемое приложение, кода на обработку банального выравнивания текста у вас потребуется значительно больше, поскольку придется вообще абстрагироваться от стилей и конкретных селекторов и, по сути, писать уже не "на jquery", а на великом-могучем javascript. Колоссальный минус jquery - дальше обращения к dom-у с помощью супермегаумных селекторов большинство разработчиков не продвигаются, так и пишут маленькие функции без параметров, рисующие что-нибудь всплывающее или мигающее. Про производительность сравнение тоже не ахти какое. Обрабатывать DOM с его помощью может и получится быстрее, но создать, например, универсальное диалоговое окно на коленке под свои нужды за короткий срок я смогу при помощи GWT, и не потеряю в производительности, тогда как вам потребуется jquery ui вместе с чужой неделимой библиотекой стилей (ну не будете же вы сами писать :) Вы правильно заметили - использование jquery или любых других аналогов сводится к использованию несвязанных между собой виджетов. GWT же позволяет строить сервисы с богатейшей бизнес-логикой и четкой, продуманной структурой. GWT сложен в понимании для новичков, по нему мало документации, особенно на русском. К тому же, для создания быстрых приложений с хорошим функционалом необходимо проектирование и планирование. Без всего этого - добро пожаловать в jquery.
djvibegga_admin
22\04\2012
Могу только сказать, что вы очень сильно заблуждаетесь по поводу jquery, и думаете, наверняка, что программисты, использующие jquery и php - все поголовно ламеры и боты. Это верх маразма привязывать к определенным технологиям определенного рода специалистов (об этом говорит то, что вы часто употребляете фразу - "ну не будете же вы сами писать"). Задача jquery - писать код быстрее, чем на javascript. И скажу вам откровенно - от этого никак не страдает ООП и масштабируемость приложения. Никто не мешает вам написать на jquery или на "могучем" javascript сделать обертки для MVC и разрабатывать свое приложение в этом стиле. Смысл данной статьи лишь в том, что GWT очень дорогая и медленная для разработки технология для построения web интерфейсов... ЗЫ. Приведите пример сайта, написанного с использованием GWT с "богатейшей бизнес логикой" и удобным и "уникальным" интерфейсом, который писался меньше 6-18 месяцев...
Только зарегистрированые пользователи могут оставлять комментарии