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