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

Aer*_*eak 7 apache-flex silverlight jquery gwt extjs

在经过多次RIA/Ajax框架的长时间辩论后,我们选择了GWT.在阅读它时,这个框架会让所有事情变得简单易行.但是,与任何技术一样,总是存在不足之处,我们会以艰难的方式学习它们.

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

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

到目前为止,我从响应中得到以下内容:

  • 很多简单UI的代码
  • 编译速度慢

谢谢

Gur*_*oca 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,或编写您自己的生成器进行反射.

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

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


mor*_*sil 8

以下是我对垮台的观察:

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

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

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

所述弹簧袋鼠工具可以产生大量的用于标准应用元件基于GWT代码.