我们开始在我们的项目中更多地使用 GWT,而 GWT 编译器的性能变得越来越烦人。
我们将开始改变我们的工作实践来缓解这个问题,包括更加强调托管模式浏览器,它将运行 GWT 编译器的需要推迟到以后,但这会带来其自身的风险,尤其是直到比我们想要的晚得多时才发现真正的浏览器的问题。
理想情况下,我们希望 GWT 编译器本身更快 - 编译一个相当小的应用程序需要一分钟时间。但是,如果我们使用 compile 是一种相当幼稚的方式,所以我希望我们可以快速轻松地获得一些收益。
我们目前正在调用 com.google.gwt.dev.Compiler 作为来自 ant Ant 目标的 java 应用程序,具有 256m 的最大堆和大量的堆栈空间。编译器由 Ant 使用 fork=true 和最新的 Java 6 JRE 启动,以尝试利用 Java6 改进的性能。我们将主控制器类与应用程序类路径一起传递给编译器,然后就可以了。
我们还能做些什么来获得额外的速度?我们能不能给它更多的信息,让它花更少的时间去发现要做什么?
我知道我们可以告诉它只为一个浏览器编译,但我们需要进行多浏览器测试,所以这并不实际。
在这一点上欢迎所有建议。
让我们从令人不安的事实开始:GWT 编译器的性能真的很糟糕。您可以在这里和那里使用一些技巧,但您不会获得明显更好的性能。
您可以做的一个不错的性能改进是仅针对特定浏览器进行编译,方法是在您的gwt.xml:
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 将使用默认语言环境,这会减少编译时的一些额外开销。
底线:您不会在编译器性能上获得数量级的提升,但是通过几次放松,您可以在这里和那里节省几分钟。