Які є доведені переваги таких інструментів, як GWT, перед чистими рамками JavaScript?


11

GWT - це стек програмного забезпечення, який переводить код Java та підмножину бібліотеки класів Java Runtime у код JavaScript.

У порівнянні з наборами інструментів JavaScript, GWT може здаватися відчужаючим за своєю природою та використанням, і надмірно складним для виконання навіть простих речей, забираючи значну частину дрібнозернистого контролю, який ви матимете безпосередньо за допомогою JavaScript.

Чому веб-розробник вирішив би використовувати такий інструмент, як GWT, який використовує мову, спочатку не орієнтовану на Інтернет, замість того, щоб використовувати чисті рамки та набори JavaScript та набори JavaScript?

Чи вимірюється це краще і на основі яких критеріїв?

Відповіді:


27

Батареї в комплекті

Інструменти Java

Це просто приголомшливо:

  • IDE: навіть якщо деякі IDE підтримують JavaScript, рівень підтримки просто не порівнюється. Спробуйте переробити код JavaScript на великих кодових базах (скажімо, 40K + LOC) і плачте.
  • Тестування одиниць: хоча це було піднято за останні кілька років, воно також є набагато більш зрілим у світі Java.
  • Постійна інтеграція та безперервна перевірка
  • Генерація документації: Звичайно, у вас є JSDoc та кілька інших

Статичний тип

Він рано наздоганяє клопів. (Невелика адреса закриття Google, зберігаючи розробника в світі JavaScript, якщо ви хочете).

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

GWT пише швидший і компактніший JavaScript, ніж ви (для великих додатків), і дозволяє вам визначити, що надсилається клієнту, можливо, простіше, ніж при еквівалентних повноцінних рішеннях JS.

Архітектура

Це забезпечує гарне розділення проблем для великих застосувань, причому гідні MVC або MVP архітектури вже заздалегідь випечені у вас під рукою.

Гідна бібліотека

GWT надає цікаві бібліотеки та дозволяє легко (ну, простіше) створювати програми з підтримкою I18N з динамічним завантаженням пакетів.

Блок-Тестування

Використання JUnit зсередини Eclipse IDE та з командного рядка. Це стосується мого першого моменту. Ви також можете також використовувати деякі інструменти якості коду Java для проекту GWT (для перевірки джерела, а не для перевірки байт-коду, оскільки їх немає).

Це все про вас !!

GWT не для всіх. Це робить деяких людей більш продуктивними і дає хороший інструмент для розробників, які не є JS, для створення професійних веб-додатків з динамічними передніми сторонами, не торкаючись (занадто багато) JavaScript. Але якщо це не працює для вас, просто використовуйте щось інше.

Якщо ви хочете більшу частину вищезазначеного, але ви просто не хочете Java, можливо, подивіться на закриття Google або інструментарій Dojo .

Була гарна ідея в той час: історія має значення !!

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

Але вже зростав попит на професійні та великі веб-додатки з динамічними передніми сторонами, тому заповнили прогалину, щоб зробити розробників більш продуктивними. У JavaScript є безліч підводних каменів та дивацтв, про які потрібно знати, і, можливо, просто краще навіть не потрібно дбати про них. Звідси ніша для таких інструментів, як GWT.

З тих пір з'явилися інші (на розум приходить CoffeeScript, Dart вже на шляху, але також великі рамки JavaScript, революція серверного JS з Node.JS та інші та потужне повернення для JavaScript як "досить хорошого" всіх -виможна мова, яка використовується не лише на стороні клієнта, але і в інших частинах вашої компанії.


додаткові нотатки

Що стосується вашого оригінального (зараз відредагованого) питання про використання Firebug

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

Однак, Firebug це все-таки корисний, хоча вам потрібно мати на увазі, що GWT генерує оптимізований та стислий JavaScript, який може бути непростим налагодження як є.

Що стосується вашого оригінального (зараз відредагованого) запитання про CSS

Так, вам все-таки потрібно написати CSS-код самостійно, звичайно. Однак ви поєднуєте свій проект GWT з іншими інструментами (як, наприклад, SASS), більш-менш легко.

Це просто інструмент!

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

Можливо , Java та JavaScript можна вважати порівнянними за рівнем абстракції. Однак Java має деякі переваги (детальніше вище), отже, перевага у використанні переваг існуючих інструментів без необхідності їх переписування. У розробників Google просто була розумна ідея зробити можливим повторне використання існуючих інструментів, орієнтованих на Java, але фактично розробити програми JavaScript.

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


Подальше читання:


"Можливо, Java та JavaScript можна вважати порівнянними за виразністю." Жарт? Еквівалентна функціональність у Java приблизно 5 разів довша.
Кевін Клайн

@kevincline: правильно, я не мав на увазі писати виразність, я мав на увазі це з точки зору абстракцій. Дякуємо, що
помітили

6
@kevincline: плюс я сказав "суперечливий", і жорстокі фанатики мови чи іншої мови будуть сперечатися про що-небудь :)
haylem

1
На додаток до пунктів @ Halem, я б зауважив, що OO на основі прототипу JavaScript може бути дещо дивним для тих, хто походить із системи на базі класів, як Java. Послідовність підходу часто корисна.
Меттью Флінн

@MatthewFlynn: і навпаки: тому чистим розробникам JS, безумовно, важче потрапляти на смугу GWT або використовувати більш важкі рамки, які копіюють більш-менш класну парадигму OO.
хайлем

6

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

DOM дерево

Хоча ефективність JavaScript може бути кращою, відображене дерево DOM часто є надмірно складним. Наприклад, реалізація дерева використовує 13+ елементів DOM, включаючи <таблицю> для кожного окремого елемента. Використання великих дерев (близько 10000 предметів) просто заморожує браузер. Чисте дерево JavaScript / HTML / CSS легко обробляло однакову кількість елементів.

Розвиток

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

Налагодження JavaScript - це абсолютно просто і приємно за допомогою налагодження Chrome або Firebug.

Експерти з молотка

Ідея використання Java для всього - це для розробників, які є "молотовими експертами". Вони майстри свого молотка, тому все - цвях. Я думаю, що такий підхід є дуже неправильним. Використання GWT також вимагає знання CSS та HTML. Без цього розробники GWT часто стикаються з проблемами, які їм практично неможливо вирішити, тоді як хтось із досвідом HTML / CSS може придумати рішення. Якщо розробникам потрібна ця компетенція, вони можуть полегшити її розробку в HTML.

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


2

Це не помірно краще.
Для повсякденного використання розгляньте jQuery , AmpleSDK або деякі html5 polyfill .

GWT має великі накладні витрати: фактичні та концептуальні.

Може бути корисним, якщо у вас є додаток java або інший код Java-сервера на порту для веб-інтерфейсу.


Ви маєте на увазі 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, як «Генеріки» та «Анотації», використовуються повноцінно і можуть використовуватися у вашій програмі.

  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 Native Interface). Можна навіть зателефонувати GWT Java Code з JavaSctipt.

  9. Якщо ви хочете створити сторінки, що вміщують закладки, тоді ви можете скористатися функцією історії GWT.

  10. Якщо ви хочете використовувати JSON як формат даних для спілкування та маніпулювання, він має дуже гарну функцію під назвою Типи накладання JavaScript.

  11. Функція відкладеного прив'язування GWT - це хороша функція, яку, напевно, можна надати через Java.

  12. Ви можете створити свій інтерфейс користувача за допомогою доступних віджетів GWT у стилі Java Swing. Ви навіть можете створити власні віджети дуже легко.

  13. Якщо ви хочете побудувати свій користувальницький інтерфейс (веб-сторінки) у чистому стилі html, ви можете скористатися функцією Declarative UI GWT. Що я вважаю однією з головних особливостей GWT. Що полегшує розробнику створення сторінок у чистому стилі HTML. Я вважаю, що це більш рентабельне, ніж кодування стилю Swing. І найголовніше, що ви все ще можете мати свою логіку в Java та лише презентаційну частину в чистому HTML. (Примітка: будь-який метод, який ви використовуєте (декларативний інтерфейс або стиль Swing), в кінцевому рахунку його буде лише HTML, але те, що має значення, полягає в тому, як ви кодуєте та підтримуєте його)

  14. Функція клієнтської групи GWT дозволяє дуже просто керувати іншими веб-ресурсами, такими як css, зображення та інший текстовий вміст.

    • CSS-ресурси дозволяють мати умовну логіку всередині вашого css. Ви також можете отримати доступ до деяких динамічних значень із коду Java на стороні клієнта GWT.
    • Він також подбає про обдумування ваших класів css. І найголовніше, що GWT має автоматизовану генерацію інтерфейсів з ваших файлів css для використання css classe.
    • Зображення ресурсу полегшує розробнику використання зображень у вашій програмі дуже легко ремонтованим способом. Коли я говорю легко, я маю на увазі сказати, коли ви хочете використовувати зображення в коді Java GWT, а не використовувати жорсткий кодований URL, ви можете використовувати ресурс зображення. Користь, яку ви отримаєте, використовуючи ресурс зображення, це якщо ви збираєтеся змінити місцеположення або використовувати якесь інше зображення з іншим іменем, вам просто потрібно змінити його в одному місці. Більш важливою особливістю ресурсу зображення є те, коли ви використовуєте його з ресурсом CSS як спрайт. Він подбає про те, щоб зробити це зображення увімкненими даними або використовувати його з спрайтом. Я не кажу, що це неможливо зробити з іншими рамками, що важливіше - наскільки швидко і легко ви можете це зробити. GWT значно полегшує вас.
    • Ресурс даних додасть деяку оптимізацію для файлів даних, таких як .pdf, щоб перейменовувати ці файли на основі їх вмісту, щоб зробити браузер сильним кешуванням. Невеликі файли даних можуть бути перетворені в рядкові дані uri.
    • Використовуючи пакет клієнтів для інших веб-ресурсів і якщо ви правильно структуруєте додаток у різні модулі. Він може стати повністю повторними модулями в цілому з кожним ресурсом. У чому полягає велика справа в багаторазових модулях? добре, якщо ви використовуєте зображення, використовуючи пряму 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 зі своїм власним спеціальним протоколом для передачі даних.

    • Якщо ви не хочете використовувати RPG GWT, ви можете робити дзвінки AJAX на сервер, щоб отримати дані з сервера за допомогою програми запрошення. Що також набагато простіше у виконанні. Він також має цікаву функцію Запит заводу. За допомогою цієї функції ви можете відкрити свій DAO або Service рівень, щоб отримати виклик з коду клієнта. Для цього вам потрібно визначити кілька наборів інтерфейсів для вашої послуги та спеціальних типів даних. І за допомогою цих інтерфейсів ви можете отримати доступ до цих служб із коду клієнта. Я написав плагін Maven для створення цих інтерфейсів. Якщо ви коментуєте свій шар DAO деякими необхідними примітками, див. ( Https://github.com/pandurangpatil/gwt-mvn-helper) передайте mvn-helper-test модуль всередині нього для використання. Запит заводу більш орієнтований на інтеграцію з таким рівнем ORM, як JDO або JPA на сервері. Він має підтримку для збереження дзвінків для даної сутності з коду клієнта. І найголовніше, коли ви викликаєте метод персист, він обчислює та надсилає лише зміни (дельта) на сервер для збереження.

    • Якщо ви хочете здійснити міждоменний дзвінок JSONP, ви можете зробити те ж саме.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.