我如何加速gwt编译器?

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

我们将开始改变我们的工作实践以减轻问题的发生,包括更加重视托管模式浏览器,这种浏览器推迟到稍后才运行GWT编译器,但这会带来它自己的风险,特别是直到比我们想要的晚得多,才能真正解决真正的浏览器问题。

理想情况下,我们希望让GWT编译器本身更快 - 编写一个相当小的应用程序的一分钟就会带来麻烦。 然而,我们正在使用编译,如果一个相当天真的时尚,所以我希望我们可以做出一些快速和简单的收益。

我们目前正在调用com.google.gwt.dev.Compiler作为来自Ant Ant目标的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使用默认语言环境,这样可以减少编译时的一些额外开销。

底线:你不会在编译器性能上有数量级的增长,但需要几次放松,你可以在这里和那里削减几分钟。


如果使用-localWorkers标志运行GWT编译器,编译器将并行编译多个排列。 这可让您使用多核机器的所有内核,例如-localWorkers 2将告诉编译器并行编译两个排列。 你不会得到幅度差异的顺序(并非编译器中的所有内容都是可并行化的),但如果编译多个排列,它仍然是一个明显的加速。

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


虽然这个条目已经很老了,你大部分人可能已经知道了,但我认为值得一提的是GWT 2.x包含一个新的编译标志,通过跳过优化来加快编译速度。 你绝对不应该以这种方式部署JavaScript,但它可以在非生产连续构建期间节省时间。

只需将flag:-draftCompile包含到您的GWT编译器行即可。

链接地址: http://www.djcxy.com/p/8871.html

上一篇: How do I speed up the gwt compiler?

下一篇: High Quality Image Scaling Library