【发布时间】:2011-05-08 12:48:21
【问题描述】:
谁能建议“GWT”或“Vaadin”是设计应用程序的更好选择吗?另外:编码风格有什么区别?
【问题讨论】:
谁能建议“GWT”或“Vaadin”是设计应用程序的更好选择吗?另外:编码风格有什么区别?
【问题讨论】:
在 GWT 中,应用程序逻辑通常在客户端运行。它只在需要读取/保存一些数据时调用服务器。
在 Vaadin 中,应用程序逻辑位于服务器端。客户端通常必须在每次用户交互后调用服务器。
GWT 优势:
应用程序逻辑(对用户交互的回复)更快,因为它在浏览器中本地运行。它对恶劣的网络条件也相对不敏感。仅在需要时使用网络(读取/保存新数据),从而节省净流量(对于高流量站点很重要)。
在这方面,Vaadin 速度较慢,并且在 UI 交互中引入了延迟,这对用户来说很烦人。如果网络不好,这将显示在 UI 响应中。
Vaadin 优势:
应用程序逻辑在服务器上运行,因此用户无法检查。可以说(Vaadin 声称)这使它更安全。
【讨论】:
还有几点:
根本区别在于,在 GWT 中,您必须将应用程序分为客户端和服务器代码,而在 Vaadin 中没有这种区别。这将影响您的应用程序的架构。
在 GWT 客户端代码中,您必须使用 Java 编写代码,并且拥有有限的可用语言功能子集(GWT 编译器可以将其翻译成 Javascript)。在 Vaadin 中,您可以使用任何 JVM 语言进行编码,因为一切都在服务器中运行(我正在使用带有 Scala 的 Vaadin)。这可能与您相关,也可能不相关。
GWT 编译非常慢,尽管在开发模式下你有模拟器。这让生产环境更新变得很痛苦(我开发的一个 GWT 应用程序已经变得相当大,目前编译大约需要 15 分钟)。
使用第 3 方小部件扩展 GWT 非常简单,也可以自行开发。创建新的 Vaadin 小部件更加复杂。
【讨论】:
Vaadin 的另一个优势:您不必设计或实现客户端-服务器通信,这是内置的。
【讨论】:
使用 Vaadin,当您想在客户端执行某些操作时,您还可以使用内置 GWT。这使您既可以简化服务器端编程模型(无需通信,也无需浏览器编程),又可以完全控制浏览器中发生的事情。
【讨论】:
Vaadin 和 GWT 的区别:
A) Vaadin 包含一个服务器端开发模型:
B) Vaadin 提供了大量高级用户界面组件。对于 GWT,需要将商业 Sencha GXT 用于可比较的组件集。
C) Vaadin 包含基于 SASS 的 Valo 主题引擎,可以轻松地从您的应用程序中构建美观的自定义主题。 Valo 是 Vaadin 的最新主题。
D) 数据绑定:Vaadin 具有将任何小部件直接关联到数据源(例如数据库、文件或服务器端中的任何其他内容)的能力。这样可以定义小部件的默认行为以作用于数据源。
【讨论】:
我还没有尝试过 Vaadin。我是 GWT 的粉丝,但我可以说我对 GWT 提供的默认小部件集有点失望。你真的需要像SmartGWT 这样的东西来填充框架。
【讨论】:
“GWT”或“Vaadin”是设计应用程序的更好选择
这不是一个“非此即彼”的问题。
使用 Vaadin,您可以获得 GWT(或其对应物,Web 组件)以及 更多。
Vaadin 是一个框架,用于通过在服务器端编写纯 Java 代码(包括声明用户界面)来构建桌面风格的 Web 应用程序。该用户界面由 Vaadin 在 Web 浏览器中呈现,自动动态生成必要的浏览器代码:HTML、CSS、JavaScript 等。业务逻辑仅在服务器端执行。 Web 客户端上的用户事件(单击按钮、将数据键入字段等)触发 Java 代码在服务器端运行。
浏览器代码如何生成和执行,以及客户端和服务器如何通信,取决于第三方技术:
Vaadin 8 及更早版本是在Google Web Toolkit (GWT) 之上构建的。 GWT 一直是spun-out of Google,作为一个完全开源的项目:http://www.GWTProject.org/
GWT 将Java 代码交叉编译成独立的JavaScript 文件。 GWT 提供其他重要功能,例如支持 UI 组件和客户端-服务器通信。
Vaadin Ltd 公司是 GWT 的主要支持者,包括主办 GWT 开发者会议,并提供咨询专业服务。
Vaadin 只是基于 GWT 构建的众多产品之一。
Vaadin 10 及更高版本,称为Vaadin Flow,是对框架的重大改写。 Vaadin Flow 不是在底层使用 GWT,而是建立在 Web Components 技术之上。
Web Components 实际上是一套技术,包括Custom Elements、Shadow DOM 和HTML Templates。这些技术现在已内置在 most every modern web browser 中,并通过 polyfills 在许多旧版浏览器上得到支持。
使用 Web 组件为 Vaadin 编写新的小部件组件比使用 GWT 容易得多。并且大多数现有的基于 Web 组件的组件都可以被包装,以通过 Java 从 Vaadin 服务器端框架提供访问。
我手头没有可引用的来源,但我记得,与基于 GWT 的小部件相比,基于 Web 组件的小部件可能运行得更快并且使用的内存更少。
顺便说一句,两代 Vaadin 都依赖于其他一些技术,例如 Atmosphere 库以获取 WebSocket 和 HTTP 的帮助。
【讨论】:
我相信 Vaadin 是一个比 GWT 更先进的框架 但 在客户端优化性能时,除非您构建自己的组件,否则您无能为力(这就是 Vaadin 的魅力所在) 在我现在正在工作的一个项目中,我做过的 90% 的员工都是魅力所在 然后我不得不在几张桌子旁边使用一个事件时间线。当我在时间轴上加载超过 400 个事件时,我的网页几乎无法使用,更不用说初始化速度很慢了。过去两个月我一直在尝试优化代码。最后我使用了一个 GWT 组件。
【讨论】:
由于任何应用程序都必须显示来自服务器的显示信息,因此简单编码的主要要求是将数据自动绑定到表单和表格。 使用 Vaadin,这就像几行代码一样简单。 在 GWT 中,首先您没有表映射。 至于表单,您可以将一个对象映射到一个表单,但要这样做,您必须为您的对象实现一个所谓的 GWT 编辑器(并且为其中的每个对象实现一个)。编辑器只不过是用于显示/修改对象的表单的定义。所以总而言之,这里没有自动化。
【讨论】:
GWT 使您能够使用 Java 编写 Web 客户端。 GWT 交叉编译器为客户端创建 JavaScript 代码。您必须为自己的服务器以及客户端与服务器之间的通信而关心服务器。生成的客户端代码已经针对许多浏览器进行了优化。我个人的看法是,在 Google 专注于 Angular 之前,GWT 非常流行。今天它不再流行了。
Vaadin 提供两种不同的解决方案: 1) 基于实现 Web 组件标准的 UI 小部件集,以及 2) Vaadin 服务器端 Java 框架。它允许您使用 Java 编写 Web 客户端。但是,Vaadin 通过服务器上的运行时动态生成 Web 客户端。 Vaadin 关心整个客户端-服务器通信。为了呈现 UI,Vaadin 直到版本 8 都使用预编译的 UI 小部件集。来自版本 10 的 Vaadin 使用 Vaadin Web 组件。
Vaadin 的其他好处:
【讨论】: