GWT减少编译的javascript大小

Jav*_*ero 8 javascript gwt

我发现编译后的JavaScript的大小增长速度比我预期的要快.在我的项目中添加几行Java代码可以增加几个Kbs的脚本大小.

目前,我编译的项目重量为1Mb.除了MVP(活动和地点),测试(JUnit)和日志记录之外,我没有使用任何外部库.

我想知道是否有任何编码实践/建议,以保持编译脚本尽可能小.我不是指代码拆分,而是编码技术或模式,可以使编译的JavaScript有效地缩小.

非常感谢

poh*_*ohl 23

GWT使用"按需付费"设计理念,并且由于您不允许使用反射,编译器可以静态地(在逐个方法的基础上)证明一段代码是"可达"的,并消除那些那不是.例如,如果您从不在ArrayList上使用remove()方法,那么该代码不会包含在生成的JavaScript中.

如果你看到只有几行的几千字节跳转,这可能意味着你已经引入了一种你尚未使用的新类型(可能还有一种取决于其他新类型).这也可能意味着您已经做了一些更改,将这种新类型"通过线路"发送回服务器,在这种情况下,GWT生成器必须包含用于封送该类型的JavaScript,以及可通过其访问的任何新类型"has-a"和"is-a"引用.

所以,如果是我,我会从那里开始:当你发现两行变化使得千兆字节增加时,首先查看类型并询问它是否是您以前使用过的类型,以及是否是通过电线发送新类型,以及该类型是否还取决于引擎盖下的其他类型.

最后一个想法:在Ray Ryan 2009年Google I/O的演讲中,他提到了他从GWT编译团队中挑选出来的一种迷信,他们建议不要使用泛型类型(我不是在谈论Java泛型,而是超类型) )作为RPC参数和返回值.特别是,不是让你的RPC调用获取或返回一个Map,而是让它接受或返回一个HashMap.相信GWT生成器可以缩小它在编译时必须创建的序列化代码的数量(例如,因为它可以避免生成TreeMap的序列化代码).

我希望这有帮助.

  • +1非常好的答案.一个额外的建议:您可以使用[编译报告](http://code.google.com/webtoolkit/doc/latest/DevGuideCompileReport.html)准确了解哪些包/类负责您的大量增长代码大小. (8认同)