アリのビルドが完了するまでの時間を短縮しようとしていました。ビルド時間のほとんどは GWT コンパイラーに費やされます。
次の ant スクリプトは、公式の GWT の例にあるスクリプトの行に書かれています。2 つの GWT モジュールがどのように Complier に渡されているかに注目してください。このスクリプトを実行すると、GWT コンパイラは 2 つのモジュールを順番にコンパイルします。
<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 モジュールを 1 つだけコンパイラに渡します。
<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 コンパイラーがコードの最適化でより良い仕事をできるかどうかは疑問です。たとえば、2 つのモジュールは多くの共通コードを使用しています。そのため、コンパイラがコード ベース全体を一度に見ることができれば、より冗長なコードを見つけることができます。理論的には、共通コード用に 1 つの JS アーティファクトを作成し、共通でないコード用に個別の JS アーティファクトを作成できます。これは、共通の JS アーティファクトが 1 回だけダウンロードされるため、両方のモジュールにアクセスするユーザーのダウンロード時間を短縮する効果があります。
私が理解している限り、GWT モジュールは独立しているため、モジュール間の最適化はありません。しかし、GWT コンパイラが内部的にこれを並列化しないという事実は、Google のエンジニアが限界を超えて並列化しないことを決定したため、いくつかのクロス モジュールの最適化またはその他の影響がある可能性があると考えさせます。
私が行った方法でコンパイルを並列化すると、生成されたコードの品質に影響があるかどうかを知りたいです。