我们开始在我们的项目中大量使用GWT,并且GWT编译器的性能变得越来越令人讨厌。
我们将开始改变工作方式以减轻该问题,包括更加强调托管模式浏览器,这推迟了以后运行GWT编译器的需求,但这带来了自身的风险,特别是在直到比我们想要的晚得多的时候,才能够真正使用浏览器解决问题。
理想情况下,我们希望使GWT编译器本身更快-一分钟的编译相当小的应用程序花费了很多精力。但是,如果使用的是相当幼稚的方式,我们将使用编译方式,因此我希望我们可以快速轻松地获得收益。
我们目前正在从ant Ant目标中调用com.google.gwt.dev.Compiler作为Java应用程序,最大堆内存为256m,并且有大量堆栈空间。Ant会使用fork = true和最新的Java 6 JRE启动该编译器,以尝试利用Java6的改进性能。我们将主控制器类与应用程序类路径一起传递给编译器,然后关闭。
我们还能做什么以提高速度?我们可以给它更多的信息,以便花费更少的时间来发现要做的事情吗?
我知道我们只能告诉它仅针对一个浏览器进行编译,但是我们需要进行多浏览器测试,因此这实际上并不实用。
此时欢迎所有建议。
让我们从令人不安的事实开始:GWT编译器的性能确实很糟糕。你可以在这里和那里使用一些技巧,但不会获得明显更好的性能。
你可以通过在你的代码中插入以下代码行来实现一个不错的性能技巧:仅针对特定的浏览器进行编译gwt.xml:
<define-property name="user.agent" values="ie6,gecko,gecko1_8"></define-property>
或使用gwt 2.x语法,并且仅适用于一种浏览器:
<set-property name="user.agent" value="gecko1_8"/>
例如,这将仅针对IE和FF编译你的应用程序。如果你知道仅使用特定的浏览器进行测试,则可以使用此小技巧。
另一个选择:如果你使用多个语言环境,并且再次仅使用一个语言环境进行测试,则可以将它们全部注释掉,以便GWT将使用默认语言环境,这可以节省编译时的额外开销。
最重要的是:你不会在编译器性能上得到数量级的提高,但是可以放轻松一些,你可以在这里和那里节省几分钟。