Каковы доказанные преимущества таких инструментов, как GWT, над чистыми средами JavaScript?

11

GWT - это программный стек, который переводит код Java и подмножество библиотеки классов Java Runtime в код JavaScript.

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

Почему веб-разработчик решил использовать такой инструмент, как GWT, который использует язык, изначально не предназначенный для Интернета, вместо использования чистых JavaScript и JavaScript-фреймворков и инструментариев?

Это заметно лучше, и на основе каких критериев?

Сурав Маюмдер
источник

Ответы:

27

Аккумуляторы включены

Инструменты Java

Это просто потрясающе

  • IDE: даже если некоторые IDE поддерживают JavaScript, уровень поддержки просто не сравнивается. Попробуйте рефакторировать код JavaScript на больших кодовых базах (скажем, 40K + LOC) и плакать.
  • Модульное тестирование: хотя оно и выросло за последние несколько лет, оно также более зрелое в мире Java.
  • Непрерывная интеграция и постоянный контроль
  • Генерация документации: Конечно, у вас есть JSDoc и несколько других

Static-типирование

Это ловит ошибки рано. (Google Closure адрес, который немного, сохраняя разработчика в мире JavaScript, если вы предпочитаете).

Оптимизированный JavaScript

GWT пишет быстрее и более компактный JavaScript, чем вы (для больших приложений), и позволяет вам определить, что отправляется клиенту, вероятно, легче, чем с эквивалентными полными решениями JS.

Архитектура

Это обеспечивает хорошее разделение проблем для больших приложений, с приличными архитектурами MVC или MVP, уже предварительно выпеченными у вас под рукой.

Достойная библиотека

GWT предоставляет интересные библиотеки и позволяет легко (ну, проще) создавать приложения с поддержкой I18N с динамической загрузкой пакетов.

Unit-тестирование

Использование JUnit из Eclipse IDE и из командной строки. Это относится к моему первому пункту. Вы также можете использовать некоторые инструменты качества кода Java в проекте GWT (для проверок исходного кода, а не проверок байт-кода, поскольку их нет).

Это все о вас!!

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

Если вам нужно большинство из вышеперечисленного, но вы просто не хотите Java, возможно, посмотрите на Google Closure или Dojo Toolkit .

Была хорошая идея в то время: история имеет значение !!

Мир JavaScript (и веб-интерфейсные технологии в целом) в наши дни чрезвычайно активен, так что ситуация улучшается. Но всего несколько лет назад все было не так ярко. LESS / SASS не были так популярны, jQuery еще не был де-фабричной JS-библиотекой, JavaScript-библиотеки не появлялись раз в две недели, и инструменты в целом не были такими уж хорошими.

Но уже был растущий спрос на профессиональные и большие веб-приложения с динамическими интерфейсами, поэтому необходимо было заполнить пробел, чтобы сделать разработчиков более продуктивными. В JavaScript очень много подводных камней и странностей, о которых вам нужно знать, и, возможно, лучше даже не заботиться о них. Отсюда ниша для таких инструментов, как GWT.

С тех пор появились другие (CoffeeScript приходит на ум, Dart уже в пути, но также и большие JavaScript-фреймворки, революция на стороне сервера JS с Node.JS и др., И сильный возврат к JavaScript как к «достаточно хорошему») -рациональный язык, который будет использоваться не только на стороне клиента, но и в других частях вашего бизнес-стека.


Дополнительные замечания

Относительно вашего оригинального (сейчас отредактированного) вопроса об использовании Firebug

Конечно, вы можете отлаживать код GWT с помощью Firebug, но в идеале вы должны отлаживать его непосредственно из отладчика Eclipse IDE, который теперь обеспечивает поддержку отладки живого кода.

Тем не менее, Firebug по-прежнему пригоден для использования, хотя следует помнить, что GWT генерирует оптимизированный и сжатый JavaScript, который может быть нелегко отладить, как есть.

Относительно вашего оригинального (сейчас отредактированного) вопроса о CSS

Да, конечно, вам все еще нужно написать CSS-код. Вы соединяете свой проект GWT с другими инструментами (например, SASS), более или менее легко.

Это просто инструмент!

Не путайте GWT с тем, что это не так: вы не пишете код Java, который будет запускаться непосредственно на стороне клиента, как байт-код Java. Вы пишете код на языке Java, который затем транслируется в JavaScript для повышения эффективности и позволяет использовать язык высокого уровня (или, по крайней мере, это то , как это означало быть видно).

Можно утверждать , что Java и JavaScript можно рассматривать как сопоставимые с точки зрения уровней абстракции. Тем не менее, Java имеет некоторые преимущества (подробно описано выше), следовательно, преимущество в том, чтобы пожинать преимущества существующих инструментов без необходимости переписывать их. У разработчиков Google просто была умная идея сделать возможным повторное использование существующих Java-ориентированных инструментов, но в действительности разрабатывать приложения JavaScript.

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


Дальнейшее чтение:

haylem
источник
«Возможно, Java и JavaScript можно рассматривать как сопоставимые с точки зрения выразительности». Шутка? Эквивалентная функциональность в Java примерно в 5 раз длиннее.
Кевин Клайн
@kevincline: правильно, я не хотел писать выразительность, я имел в виду термины уровней абстракций. Спасибо за то, что заметили это (сейчас 2
часа
6
@kevincline: к тому же я сказал «спорный», и фанатики какого-то языка или другого спорили бы что угодно :)
Хайлем
1
В дополнение к элементам @ Halem, я бы добавил, что ОО на основе прототипов JavaScript может быть немного странным для тех, кто прибывает из системы на основе классов, такой как Java. Последовательность подхода часто бывает полезна.
Мэтью Флинн
@MatthewFlynn: и наоборот: именно поэтому разработчикам JS определенно труднее попасть в универсал GWT или использовать более тяжелые фреймворки, которые в большей или меньшей степени воспроизводят основанную на классах ОО-парадигму.
Хайлем
6

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

Дерево DOM

Хотя производительность JavaScript может быть лучше, отображаемое дерево DOM часто неоправданно сложно. Например, реализация Tree использует более 13 элементов DOM, включая <table> для каждого отдельного элемента. Использование больших деревьев (около 10000 элементов) просто останавливает браузер. Чистое дерево JavaScript / HTML / CSS могло легко обрабатывать одинаковое количество элементов.

развитие

Цикл модификаций чистого исходного кода JavaScript / HTML / CSS нельзя превзойти. Вы просто сохраняете исходный файл и обновляете страницу в браузере. Это ключевой фактор производительности, и GWT просто не может конкурировать, даже используя кодовый сервер.

Отладка JavaScript абсолютно проста и приятна с отладчиком Chrome или Firebug.

Hammer Experts

Идея использовать Java для всего есть для разработчиков, которые являются "экспертами молотка". Они мастера своего молота, поэтому все гвозди. Я думаю, что этот подход очень неправильный. Использование GWT также требует знания CSS и HTML. Без этого разработчики GWT часто сталкиваются с проблемами, которые они почти невозможно решить, в то время как кто-то с опытом работы с HTML / CSS может найти решение. Если разработчики нуждаются в этой компетенции, они могут упростить разработку HTML.

Мое мнение таково, что большинство преимуществ, предоставляемых GWT, по крайней мере сомнительны, в то время как недостатки гораздо серьезнее по сравнению с разработкой на чистом JavaScript / HTML / CSS.

Жолт Скай
источник
2

Это не заметно лучше.
Для повседневного использования рассмотрите jQuery , AmpleSDK или некоторые html5 polyfill .

У GWT много накладных расходов: актуальных и концептуальных.

Может быть полезно, если у вас есть java-приложение или какой-нибудь java-код на стороне сервера для переноса на веб-интерфейс.

Zjr
источник
Вы имеете в виду ClojureScript. Сам Clojure на основе LISP, нацеленный на JVM. ClojureScript - это тот, который создает код JS.
Хайлем
Да, в любом случае, это уже отредактировано. Сохраняя это простым.
ZJR
2

Несколько преимуществ использования GWT, о которых я думаю (подробнее читайте в моем блоге http://www.pandurangpatil.com/2012/09/benefits-of-using-gwt.html )

  1. Поскольку клиентское приложение GWT написано на Java, можно получить возможность улавливать синтаксические ошибки во время компиляции из-за того же (хотя оно не поддерживает все классы JRE, поскольку эти функции не поддерживаются самими браузерами). Давайте возьмем пример, чтобы понять, что я говорю. Если вы неправильно написали имя переменной JavaScript, используя чистую библиотеку JavaScript. Единственный способ уловить такую ​​ошибку - запустить приложение и протестировать результаты. Функции Java, такие как Generics и Annotations, используются полностью и могут использоваться в вашем приложении.

  2. Можно легко использовать существующие доступные библиотеки или написать одну для создания кода в соответствии с требованиями с легкостью, поскольку код, который должен быть сгенерирован, должен быть в Java. Компилятор GWT позаботится о его компиляции и преобразовании в JavaScript.

  3. Управление кодом становится проще.

  4. Можно просто написать некоторую общую бизнес-логику таким образом, чтобы ее можно было использовать в коде на стороне клиента GWT, а также в коде на стороне сервера, как в Java, например, для проверки данных или некоторых общих служебных функций.

  5. С помощью плагина GWT eclipse вы можете легко отлаживать клиентский код на Java для вашей бизнес-логики.

  6. Как компилятор GWT компилирует ваш клиентский Java-код и генерирует из него JavaScript. Какой вам нужно развернуть его на вашем сервере, и он будет обслужен и выполнен в браузере пользователя по запросу. При создании этого JavaScript он будет делать некоторые оптимизации.

    • Он не учитывает мертвый код при генерации JavaScript, когда я говорю «мертвый код», я имею в виду «код, который существует, но не вызывается из основного потока». В свою очередь уменьшает эффективный размер вашего окончательного кода JavaScript.

    • Он заботится о запутывании сгенерированного кода JavaScript.

    • Это делает минификацию сгенерированного кода JavaScript.

    • И что более важно, он будет генерировать оптимизированный для конкретного браузера код отдельно. Когда я говорю отдельно, он генерирует отдельный JavaScript-код для конкретного браузера, который будет обслуживаться при получении соответствующего запроса от данного браузера. Что, в свою очередь, уменьшает размер кода JavaScript, который загружается для конкретного браузера, поскольку он не содержит всю специфичную для браузера обработку в одном коде.

  7. Если вы пишете свое заявление на разных языках, например на английском, хинди, маратхи и т. Д., Используя функцию интернационализации GWT. При создании кода JavaScript он создает копию для каждого языка и комбинации браузера. Что делает сгенерированный код JavaScript для данной комбинации языка и браузера наиболее оптимальным и небольшим.

  8. Если вам нужно использовать прямой JavaScript, который можно вызвать из кода Java GWT, это можно сделать с помощью JSNI (собственный интерфейс JavaScript). Можно даже вызвать GWT Java Code из JavaSctipt.

  9. Если вы хотите сделать закладку способными страницами, то вы можете использовать функцию истории GWT.

  10. Если вы хотите использовать JSON в качестве формата данных для связи и манипулирования, у него есть очень хорошая функция, которая называется JavaScript Overlay Types.

  11. Функция отложенного связывания в GWT - это хорошая функция, которую, я полагаю, можно обеспечить благодаря Java.

  12. Вы можете создать свой пользовательский интерфейс, используя доступные виджеты GWT в стиле Java Swing. Вы даже можете легко создавать свои собственные виджеты.

  13. Если вы хотите создать свой пользовательский интерфейс (веб-страницы) в чистом HTML-стиле, вы можете использовать функцию декларативного пользовательского интерфейса GWT. Что я чувствую одной из главных особенностей GWT. Что облегчает разработчику создание страниц в чистом стиле HTML. Что, я полагаю, более приемлемо, чем кодирование в стиле Swing. И самое главное, вы все еще можете иметь свою логику в Java и только часть представления в чистом HTML. (Примечание: какой метод вы используете (декларативный пользовательский интерфейс или стиль Swing), в конечном итоге это будет только HTML, но разница в том, как вы кодируете и поддерживаете его).

  14. Функция Client Bundle в GWT позволяет очень легко управлять другими веб-ресурсами, такими как CSS, изображения и другое текстовое содержимое.

    • Ресурсы CSS позволяют иметь условную логику внутри вашего CSS. Вы также можете получить доступ к некоторым динамическим значениям из вашего Java-кода на стороне клиента GWT.
    • Он также позаботится о запутывании ваших классов CSS. И самое главное, GWT автоматизировал генерацию интерфейсов из ваших CSS-файлов для использования CSS-классов.
    • Ресурс изображения позволяет разработчику легко использовать изображения в вашем приложении. Когда я говорю легко, я хочу сказать, когда вы хотите использовать изображения в коде Java GWT, а не использовать жестко закодированный URL, вы можете использовать ресурс изображения. Преимущество, которое вы получите от использования ресурса изображения, заключается в том, что если вы собираетесь изменить местоположение или использовать другое изображение с другим именем, вам просто нужно изменить его в одном месте. Более важной особенностью ресурса изображения является использование его с ресурсом CSS в качестве спрайта. Он позаботится о том, чтобы сделать это изображение в виде встроенных данных или использовать его со спрайтом. Я не говорю, что это невозможно сделать с другими фреймворками, и что более важно, насколько быстро и легко вы можете это сделать. GWT делает это намного проще для вас.
    • Ресурс данных добавляет некоторую оптимизацию для файлов данных, таких как .pdf, чтобы переименовать эти файлы на основе их содержимого, чтобы сделать его надежно кэшируемым браузером. Небольшие файлы данных могут быть преобразованы во встроенные данные URI.
    • Используя Client Bundle для других веб-ресурсов и, если вы правильно структурируете свое приложение в разные модули. Это может стать полностью повторно используемыми модулями в целом с каждым ресурсом. Что хорошего в многоразовых модулях? хорошо, если вы используете изображения, используя прямой URL в каком-то модуле. И если вы включите этот модуль в другой модуль и попытаетесь использовать компоненты, созданные в этом модуле, вам все равно нужно будет скопировать эти изображения на общедоступный URL-адрес вашего окончательного приложения. Что вам не нужно делать, если вы используете эти изображения в качестве ресурсов изображения.
    • Другой оптимизации вы можете достичь, создав небольшие модули, используя клиентский пакет для CSS и изображений. Где вы можете включить только необходимые модули в ваши последние модули. Разница будет заключаться в том, что окончательный модуль JavaScript и другие ресурсы будут содержать только необходимое содержимое, а не все содержимое, даже если вы хотите использовать небольшой фрагмент модуля.
  15. Cell Widgets: для представления разбитого на страницы сбора данных GWT имеет Cell Widgets. Есть виджеты, такие как CellTable, CellList, CellTree и CellBrowser.

    • CellTable предназначен для представления данных в формате таблицы с разбивкой по страницам, имеет функцию, позволяющую изменять содержимое заданной ячейки. Он поддерживает разбиение на страницы на стороне клиента и на стороне сервера, поддерживает сортировку по столбцу, а также поддерживает выбор одной или нескольких записей и генерацию событий для одного и того же.
    • CellList может использоваться для представления данных в формате списка, а элементы могут отображаться в произвольном формате. Он также поддерживает разбиение на страницы на стороне клиента и сервера и выбор одной или нескольких записей и генерирует события для выбора. CellTree и CellBrowser могут использоваться для представления данных в древовидном формате.
  16. Связь с сервером из кода клиента GWT. Он поддерживает несколько способов реализации взаимодействия клиент-сервер.

    • Если вас не интересует протокол, используемый для передачи данных, то это механизм GWT RPC. Очень легко интегрировать ваш клиентский код для передачи данных с сервера. Вы можете определить пользовательские DTO (объект передачи данных) в коде клиента, который может даже использоваться в коде на стороне сервера. Реализация на стороне сервера принимает тот же DTO как параметр или возвращаемое значение. Все остальное заботится о каркасной работе GWT RPC. Он даже распространяет исключения, возникающие из кода на стороне сервера, в вызывающую сторону в коде на стороне клиента (при условии, что вам необходимо определить эти классы исключений в пакете кода на стороне клиента. GWT RPC внутренне использует вызовы AJAX с собственным протоколом для передачи данных.

    • Если вы не хотите использовать GWT RPC, вы можете выполнять серверные AJAX-вызовы для получения данных с сервера с помощью Request Builder. Что также гораздо проще реализовать. Также есть интересная функция Request Factory. С помощью этой функции вы можете сделать свой уровень DAO или Service доступным для вызова из клиентского кода. Для этого вам нужно определить несколько наборов интерфейсов для вашего сервиса и пользовательских типов данных. И используя эти интерфейсы, вы можете получить доступ к этим сервисам из клиентского кода. Я написал Maven плагин для создания этих интерфейсов. Если вы аннотируете свой слой DAO некоторыми необходимыми аннотациями, обратитесь ( https://github.com/pandurangpatil/gwt-mvn-helper) обратитесь к модулю mvn-helper-test внутри него для использования. Фабрика запросов более нацелена на интеграцию со слоем ORM, таким как JDO или JPA на сервере. Он имеет поддержку для вызова постоянства на данном объекте из клиентского кода. И самое главное, когда вы вызываете метод persist, он вычисляет и отправляет только изменения (дельта) на сервер для сохранения.

    • Если вы хотите сделать междоменный вызов JSONP, вы можете сделать то же самое.

Пандуранг Патил
источник