如何加快 gwt 编译器的速度?

2022-08-31 06:07:06

我们开始在项目中更多地使用GWT,GWT编译器的性能变得越来越烦人。

我们将开始改变我们的工作实践来缓解这个问题,包括更加强调托管模式浏览器,它将运行GWT编译器的需求推迟到以后,但这带来了自己的风险,特别是直到比我们想要的晚得多才发现真实浏览器的问题。

理想情况下,我们希望使GWT编译器本身更快 - 编译一个相当小的应用程序一分钟就是小问题。但是,如果这是一个相当幼稚的方式,我们正在使用编译,所以我希望我们可以快速轻松地获得一些收益。

我们目前正在从蚂蚁Ant目标调用com.google.gwt.dev.Compiler作为java应用程序,最大堆数为256m,堆栈空间很大。该编译器由Ant使用fork=true和最新的Java 6 JRE启动,以尝试利用Java6改进的性能。我们将主控制器类与应用程序类路径一起传递给编译器,然后关闭它。

我们还能做些什么来获得额外的速度?我们能否为它提供更多信息,以便它花更少的时间去发现该做什么?

我知道我们可以告诉它只为一个浏览器编译,但我们需要做多浏览器测试,所以这并不实际。

此时欢迎所有建议。


答案 1

让我们从一个令人不舒服的事实开始: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将使用默认区域设置,这样可以减少编译时的一些额外开销。

底线:你不会得到编译器性能的数量级增长,但是放松一下,你可以在这里和那里减少几分钟。


答案 2

如果使用 -localWorkers 标志运行 GWT 编译器,编译器将并行编译多个排列。这允许您使用多核计算机的所有内核,例如 -localWorkers 2 将告诉编译器并行编译两个排列。你不会得到数量级的差异(不是编译器中的所有内容都是可并行化的),但如果你正在编译多个排列,它仍然是一个值得注意的加速。

如果您愿意使用 GWT 的主干版本,则可以对任何浏览器使用托管模式(进程外托管模式),这缓解了托管模式当前的大部分问题。这似乎是GWT的发展方向 - 总是使用托管模式进行开发,因为编译不太可能更快地获得量级。


推荐