我正处于我们 Select 使用GWT实现的项目的开始/中期.有没有人在使用GWT(和GWT-EXT)时遇到过无法克服的重大缺陷?从性能的Angular 来看呢?

我们已经看到/听到的几件事包括:

  • 谷歌无法索引内容
  • 总的来说,CSS和样式似乎有点古怪

也在寻找关于这些项目的任何其他反馈.谢谢!

推荐答案

我首先要说的是,我是GWT的忠实粉丝,但确实有很多trap ,但我们能够克服的大部分(如果不是全部的话):

Problem:个较长的编译时间,随着项目的增长,编译所需的时间也会增加.我听说过20分钟的汇编报告,但我的平均约为1分钟.

Solution:将代码拆分为单独的模块,并告诉ant仅在代码发生更改时构建它.此外,在开发过程中,只需构建一个浏览器,就可以大大加快编译速度.你可以把这个放进你的电脑里.gwt.xml文件:

<set-property name="user.agent" value="gecko1_8" />

gecko1_8是Firefox 2+,ie6是IE等等.


Problem:托管模式非常慢(至少在OSX上是这样),而且无法与您在浏览器中编辑JSP或Rails页面并点击刷新时获得的"实时"更改相提并论.

Solution:你可以给托管模式更多的内存(我一般有512M的内存),但它仍然很慢,我发现一旦你对GWT足够好,你就会停止使用它.您进行了大量更改,然后只为一个浏览器编译(通常需要20多个编译时间),然后在浏览器中单击刷新即可.

更新:对于GWT2.0+来说,这不再是一个问题,因为您使用了新的"开发模式".这基本上意味着你可以直接在你 Select 的浏览器中运行代码,这样就不会降低速度,而且你还可以对它进行firebug/判断,等等.

http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM


Problem:GWT代码是java,对布局HTML页面有不同的思路,这使得采用HTML设计并将其转换为GWT变得更加困难

Solution:您再次习惯了这一点,但不幸的是,将HTML设计转换为GWT设计总是比执行将HTML设计转换为JSP页面之类的操作要慢.


Problem:GWT需要一点头脑,还不是主流.这意味着大多数加入您的团队或维护您的代码的开发人员都必须从头开始学习

Solution: GWT是否会起飞还有待观察,但如果你是一家控制招聘对象的公司,那么你总是可以 Select 了解GWT或想要学习GWT的人.


与jQuery或普通的javascript相比,Problem:GWT是一个巨大的锤子.要实现这一点,需要进行更多的设置,而不仅仅是包含一个JS文件.

Solution:.使用jquery这样的库来完成适合这些应用程序的较小、简单的任务.当您想要在AJAX中构建真正复杂的东西,或者需要通过RPC机制来回传递数据时,可以使用GWT.


Problem:有时为了填充GWT页面,需要在页面首次加载时进行服务器调用.用户在获取所需数据时坐在那里观看加载符号可能会很烦人.

Solution:在JSP页面的情况下,在变成HTML之前,您的页面已经由服务器呈现,因此您实际上可以进行所有GWT调用,并将它们预加载到页面上,以便进行即时加载.详情请参见此处:

Speed up Page Loading by pre-serializing your GWT calls


我从来没有遇到过任何问题CSS样式我的小部件,开箱即用,自定义或其他,所以我不知道你说的trap 是什么意思?

至于性能,我总是发现编译后的GWT代码速度很快,AJAX调用几乎总是比整页刷新小,但这并不是GWT所独有的,尽管使用JAVA后端得到的本机RPC数据包非常紧凑.

Java相关问答推荐

PostgreSQL货币兑换率查询

Cosmos Change Feed Process Lag远远超过收集中的记录数量

我的scala文件失败了Scala.g4 ANTLR语法

@从类文件中删除JsonProperty—Java

滚动视图&不能在alert 对话框中工作(&Q;&Q;)

使用意向过滤器从另一个应用程序启动服务

Java 21虚拟线程执行器的性能比池化操作系统线程的执行器差?

如何调整工作时间日历中的时间

无法初始化JPA实体管理器工厂:无法确定为Java类型<;类>;推荐的JdbcType

试着做一个2x2的魔方求解算法,我如何找到解路径(DFS)?

Com.google.firebase.database.DatabaseException:无法将类型为java.lang.Boolean的值转换为字符串.这是关于什么的?

Mac上的全屏截图在使用JavaFX时不能正常工作吗?

Log4j与jdk21兼容吗?

如何在构建Gradle项目时排除com.google.guava依赖项的一个变体

如果按钮符合某些期望,如何修改它的文本?

如何在我的世界中为互动增加冷却时间?

何时调用密封层次 struct 的switch 中的默认情况

如何使JOOQ渐变脚本不重新创建表未更改的类?

为什么我得到默认方法的值而不是被覆盖的方法的值?

ExecutorService:如果我向Executor提交了太多任务,会发生什么?