GWT和Vaadin的区别

57

有人能建议一下,设计一个应用程序,是选择“GWT”还是“Vaadin”更好?此外:编码风格有什么不同?


请查看以下类似问题的链接:https://dev59.com/_1rUa4cB1Zd3GeqPj3Bt#7126133 和 https://dev59.com/PFXTa4cB1Zd3GeqPyRZO#5273359 - eeq
10个回答

62

在GWT应用程序中,逻辑通常在客户端上运行。只有当需要读取/保存某些数据时,它才调用服务器。

在Vaadin应用程序中,逻辑在服务器端运行。客户端通常必须在每次用户交互后调用服务器。

GWT优势:
应用程序逻辑(响应用户交互)更快,因为它在浏览器本地运行。它相对不敏感于不良网络条件。仅在需要时使用网络(以读取/保存新数据),这可以节省网络流量(对于高流量站点很重要)。

在这方面,Vaadin较慢并引入了UI交互的延迟,这会使用户感到烦恼。如果网络差,这将显示在UI响应性能上。

Vaadin优势:
应用程序逻辑在服务器上运行,因此用户无法检查它。可以说(Vaadin声称)这使其更安全。


2
除了增加的安全性外,还有其他优点,如自动客户端-服务器通信和可用于应用逻辑的大量Java库。 - eeq

37

还有一些要点:

  • 一个基本区别是,在GWT中,你必须将应用程序分成客户端和服务器端代码,而在Vaadin中没有这样的区别。这将影响你的应用程序架构。

  • 在GWT客户端代码中,你必须使用Java编程,并且只能使用有限的语言特性(GWT编译器可以将这些特性翻译成Javascript)。在Vaadin中,你可以使用任何JVM语言进行编码,因为所有代码都在服务器端运行(我正在使用Scala编写Vaadin)。这可能与你有关或者无关。

  • GWT编译非常慢,虽然在开发模式下你有模拟器。这使得更新生产环境变得痛苦(我开发的一个GWT应用程序已经变得相当庞大,目前需要约15分钟才能编译)。

  • 使用第三方小部件扩展GWT非常简单,也可以自己创建小部件。创建新的Vaadin小部件更加复杂。


20

Vaadin 的另一个优势:您不需要设计或实现客户端和服务器之间的通信,因为这已经内置在其中。


13

简短概述

使用"GWT"还是"Vaadin"来设计应用程序更好的选择

这不是一个“二选一”的问题。

使用Vaadin,您将获得GWT(或其对应的Web Components)以及更多的功能


Vaadin是一个框架,通过在服务器端编写纯Java代码(包括声明用户界面),用于构建类似桌面应用程序的Web应用。该用户界面由Vaadin自动生成必要的浏览器代码:HTML、CSS、JavaScript等,在Web浏览器中呈现。业务逻辑仅在服务器端执行。Web客户端上的用户事件(按钮点击、数据输入等)会触发服务器端运行Java代码。
如何生成和执行浏览器代码以及客户端和服务器如何通信,取决于第三方技术:
- 在Vaadin 8及更早版本中,使用GWT。 - 在Vaadin 10及更高版本中,使用Web组件。
Vaadin 8及更早版本使用GWT。

Vaadin 8及早期版本是基于Google Web Toolkit (GWT)构建的。GWT已经从谷歌中分离出来,成为一个完全开源的项目:http://www.GWTProject.org/

GWT将Java代码交叉编译成独立的JavaScript文件。GWT提供了其他重要功能,如UI组件和客户端-服务器通信支持。

Vaadin Ltd公司是GWT的主要支持者之一,包括举办GWT开发人员会议和提供咨询专业服务。

Vaadin只是基于GWT构建的众多产品之一。

Vaadin 10及以上版本使用Web组件

Vaadin 10及以上版本,也称为Vaadin Flow,是该框架的重大改写。Vaadin Flow不再使用GWT,而是建立在Web组件技术之上。

Web组件实际上是一套技术,包括自定义元素Shadow DOMHTML模板。这些技术现在已经内置于几乎所有现代web浏览器中,并通过polyfills支持许多旧版浏览器。

使用Web Components编写Vaadin的新小部件组件比使用GWT更加容易。并且,大多数现有的基于Web Components的组件都可以包装起来,以便通过Java从Vaadin服务器端框架访问。我没有手头的来源可以引用,但我记得,基于Web Components的小部件可能比它们基于GWT的等效物运行更快,并且使用更少的内存。

顺便提一下,Vaadin的两个版本都依赖于其他技术,例如Atmosphere库用于帮助处理WebSocket和HTTP。


8

Vaadin和GWT的区别:

A) Vaadin包括一种服务器端开发模型,它可以:

  • 通过减少用户界面实现的层数,将代码行数减半。
  • 允许您使用任何基于JVM的语言进行用户界面-Scala、Groovy
  • 通过将用户界面逻辑保留在服务器端来增加安全性
  • 允许从Web服务器同步调用任何后端API
  • 允许在服务器端架构应用程序中使用任何标准Java库和工具的UI层
  • 不需要Java到JavaScript编译步骤,这通常需要时间或使GWT项目的工具复杂化-相反,您有Vaadin客户端引擎
  • 提供开箱即用的服务器推送,无需额外的代码

B) Vaadin提供了大量高级用户界面组件。对于GWT,您需要使用商业Sencha GXT才能获得可比较的组件集。

C) Vaadin包括基于SASS的Valo主题引擎,使从应用程序构建漂亮的自定义主题变得容易。Valo是Vaadin的最新主题。

D) 数据绑定:Vaadin已经合并了将任何小部件直接关联到数据源(如数据库、文件或服务器端的任何其他内容)的能力。这使得定义小部件的默认行为以对数据源进行操作成为可能。

Vaadin vs GWT


8

使用Vaadin时,当您想在客户端执行某些操作时,还可以使用内置的GWT。这使您既可以拥有服务器端编程模型的简单性(不需要通信,也不需要浏览器编程),又可以完全控制浏览器中发生的事情。


5

我还没有尝试过Vaadin。我是GWT的粉丝,但我可以说,GWT提供的默认小部件集合让我有点失望。你真的需要像SmartGWT这样的东西来完善框架。


4
为了获得更大的灵活性,GWT比SmartGWT更好。 - koma

4
我认为Vaadin比GWT更先进的框架,但是在优化客户端性能方面,除非你构建自己的组件(这也是Vaadin的美妙之处),否则你无法做太多事情。在我正在工作的项目中,我完成了90%的工作都非常流畅。然后,我需要在几个表旁边使用事件时间线。当我在时间线上加载了超过400个事件时,我的网页几乎无法使用,更不用说初始加载速度非常慢了。我试图优化代码已经两个月了。最终,我使用了一个GWT组件。

2

对于任何应用程序来说,显示来自服务器的信息是必须的。因此,简单编码的一个主要需求就是将数据自动绑定到表格和表单中。 使用Vaadin,只需要几行代码即可轻松实现此功能。 而在GWT中,首先您没有表格映射。 至于表单,您可以将对象映射到表单上,但是为了这样做,您必须为对象实现所谓的GWT编辑器(并为其中每个对象都实现一个)。编辑器不过是定义用于显示/修改对象的表单而已。总之,这里没有自动化。


0

GWT使您能够使用Java编写Web客户端。 GWT交叉编译器为客户端创建JavaScript代码。 您需要自己负责服务器以及客户端与服务器的通信。 生成的客户端代码已经针对许多浏览器进行了优化。 我个人认为,GWT在Google关注Angular之前非常流行。 今天它不再那么流行。

Vaadin提供两种不同的解决方案: 1)基于实现Web组件标准的UI小部件集, 2)Vaadin服务器端Java框架。 它允许您使用Java编写Web客户端。 但是,Vaadin通过服务器动态运行时生成Web客户端。 Vaadin负责整个客户端与服务器的通信。 为了呈现UI,Vaadin在版本8之前使用预编译的UI小部件集。 从版本10开始,Vaadin使用Vaadin web组件。

Vaadin的其他好处:

  • 您不需要接触HTML和JavaScript,也不需要担心DOM操作、浏览器历史记录和其他低级问题
  • 服务器端架构提供更好的安全性
  • 现代主题
  • CSS个性化样式
  • RapidClipse为基于Eclipse的Vaadin提供了一个强大的UI构建器,包含Vaadin <> JPA数据绑定、国际化、UI持久化、扩展Hibernate工具、JPA-SQL查询语言和MicroStream集成,用于创建Java内存数据库应用程序和微服务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接