我试图减少完成 ant 构建所需的时间。大部分构建时间由 GWT 编译器占用。
以下 ant 脚本是根据官方 GWT 示例中的脚本行编写的。注意两个 GWT 模块是如何传递给编译器的。当您运行此脚本时,GWT 编译器会按顺序编译这两个模块。
<target name="gwtc" description="GWT compile to JavaScript">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
........
........
<arg value="com.af.gwtmodules.dashboard.Dashboard" />
<arg value="com.af.gwtmodules.administration.Administration" />
<arg line=" -localWorkers 16" />
</java>
</target>
我将任务更改为并行运行 2 个编译任务,并且在每个任务中我只将一个 GWT 模块传递给编译器。
<target name="gwtc" description="GWT compile to JavaScript">
<parallel threadsperprocessor="16">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
........
........
<arg value="com.af.gwtmodules.dashboard.Dashboard" />
<arg line=" -localWorkers 16" />
</java>
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
........
........
<arg value="com.af.gwtmodules.administration.Administration" />
<arg line=" -localWorkers 16" />
</java>
</parallel>
</target>
这确实像预期的那样运行得更快。但是,我想知道 GWT 编译器是否可以在代码优化方面做得更好,如果一次给所有模块而不是单独给每个模块。例如,这两个模块使用了很多通用代码。所以如果编译器可以一次看到整个代码库,它可以找到更多的冗余代码。理论上,它可以为公共代码创建单个 JS 工件,并为不常见的代码创建单独的 JS 工件。这将减少访问这两个模块的用户的下载时间,因为公共 JS 工件只会下载一次。
据我了解,GWT 模块是独立的,因此不会有跨模块优化。但是 GWT 编译器内部没有并行化这一事实使我认为可能存在一些跨模块优化或其他后果,因此 Google 工程师决定不将其并行化超过限制。
我想知道并行化编译方式是否对生成代码的质量有任何影响。