使用Google Web Toolkit(GWT)时出现的主要缺陷是什么?

时间:2011-02-19 04:55:48

标签: silverlight flex gwt jquery extjs

经过多次RIA / Ajax框架的长期争论,我们选择了GWT。在阅读它时,这个框架会让一切都变得简单。但是,与任何技术一样,总是存在不足之处,我们会以艰难的方式学习它们。

使用Google Web Toolkit(GWT)时出现的主要缺陷或问题是什么?

(例如:后退/前进按钮支持,慢响应时间,布局定位,JavaScrit错误等)

到目前为止,我从回复中得到以下信息:

  • 简单UI的大量代码
  • 慢速编译

谢谢

5 个答案:

答案 0 :(得分:14)

我已经使用GWT近2年了。虽然我可以被称为关于GWT的狂热分子,但是有些问题应该让人知道......

  1. 正如其他人所说,JavaScript编译很慢。我的应用程序需要将近4分钟的核心i7 CPU,8 GB内存。生成的JavaScript总大小约为5 MB。但是由于开发模式,不需要经常编译JavaScript。

  2. GWT RPC在开发模式下非常慢。它比托管模式慢100倍。对我们来说这是一个很大的问题。我们确实考虑过因为这个原因而放弃GWT。在开发模式下GWT RPC性能低下的原因是序列化。在String模式下,String以外的类型的序列化速度令人难以置信地慢。我们确实实现了自定义序列化,它比GWT内置序列化快近30倍。

  3. 声称编写GWT应用程序只需要了解Java只是一种幻想。你应该有关于CSS和DOM的可靠信息。如果不这样做,您将花费太多时间来调试用户界面。

  4. 您应该考虑只能使用JDK的一小部分来实现GWT应用程序。反思不可用;您应该使用第三方库,例如GWT ENT,或者编写您自己的generator进行反思。

  5. 需要考虑的另一个警告是GWT编译器生成的JavaScript的大小。大多数GWT应用程序由单个Web页面组成,而不是多页面传统Web应用程序。因此,加载应用程序需要大量时间。虽然可以通过使用多模块方法和代码拆分来缓解这种情况,但使用这些技术并不总是直截了当。

  6. 对服务器的所有调用都是异步的。你应该适应自己编写异步代码。而异步代码的缺点是它比等效的同步代码更复杂,更不易读。

答案 1 :(得分:8)

以下是我对垮台的观察:

  • 由于与GWT相关的大量高级约定,如果想要在large applications中有效使用GWT,那么
  • 陡峭的学习曲线。
  • 异步请求在设计整个应用程序时需要不同的思维方式
  • 编译时间长,它不像完整版本那样影响开发模式(编译所有浏览器和语言的所有排列,大型项目可能需要数小时)。 JRebel可以减少开发模式重启的要求。
  • 单元测试的问题 - GWTTestCase启动时间太长,无法用于单元测试。但是,由于GWTTestSuite,它可以很好地进行集成测试。感谢保持干净的MVP,也可以unit test Presenter logic by mocking Displays(参见我的回答)。
  • 需要一些经验来决定是否应该在客户端(编译为JS)或服务器端实现特定逻辑。
  • 当然还有一些小错误,特别是在Editors和RequestFactory等新功能中。它们通常可以通过新版本快速解决,但是当遇到一些GWT问题时可能会很烦人。无论如何,最后的垮台适用于我目前使用的任何Java框架。 ;)
  • 客户端缺乏反思,可以使用Deffered Binding and Generators解决,但这是另一个要学习的惯例。

如果我要开始新的GWT项目,我会:

  • 添加对Google GIN库的依赖(不幸的是,它目前不适用于GWT 2.2,但很快就会兼容)。
  • 使用LayoutPanels
  • 设计总体布局
  • 根据地方和活动的概念构建应用程序“流程”。
  • 将所有地方放入单独的GWT模块(常用导航参考)
  • 将每个Activity放在自己的GWT模块中(稍后可以在application code splitting中提供帮助)
  • 将Activity视为胶水代码,其中包含使用GIN注入的View和Presenter提供程序
  • 设计与RequestFactory兼容的数据实体
  • 使用UiBinder,MVP和Editors框架创建所有数据编辑器
  • 在Presenters和Activities中使用RequestFactory(以获取要显示的初始数据)。
  • 使用GIN注入每个标识的常用组件,如标准日期格式等。

spring roo工具可以为标准应用程序元素生成大量基于GWT的代码。

答案 2 :(得分:2)

前段时间我用GWT做了一个原型应用程序,我发现将java编译成javascript所花费的时间花了很长时间。随着我们编写的每行代码,编译时间越来越多。

我对代码不满意,编译测试阶段越来越慢。

有关编译器的另一个问题:How do I speed up the gwt compiler?

答案 3 :(得分:2)

我认为主要的缺点是GWT经常需要编写大量代码来完成简单的任务(但每次发布时它会变得越来越好)。另一方面,它在开发复杂的自定义小部件时非常出色。 在几个项目中,GWT已经证明在性能方面非常出色并且没有太多错误 - 它在跨浏览器支持方面非常好。

答案 4 :(得分:0)

作为耶稣诞生的粉丝...... 我更喜欢JQuery而不是GWT,因为在不编写许多类的情况下,很容易制作动画或完成复杂的任务。