0

アリのビルドが完了するまでの時間を短縮しようとしていました。ビルド時間のほとんどは 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 のエンジニアが限界を超えて並列化しないことを決定したため、いくつかのクロス モジュールの最適化またはその他の影響がある可能性があると考えさせます。

私が行った方法でコンパイルを並列化すると、生成されたコードの品質に影響があるかどうかを知りたいです。

4

1 に答える 1

1

CPU が 100% で実行されている場合、または使用可能なメモリをすべて使用している場合は、並行して実行するタスクの数は関係ありません。実際、タスクを並行してプッシュすると、パフォーマンスが向上するのではなく、パフォーマンスが低下する可能性があります。

すでに localWorkers を 16 に設定しています。これは多くの並列スレッドです。2 つのタスクを渡すと、単純にスレッド数が 2 倍になります。この数を増やすことでパフォーマンスが向上する場合は、試してみてください。ただし、結果は驚くべきものに見えます (アプリが非常に小さいか、コンピューターが巨大です)。

私の知る限り、モジュールを順番にコンパイルするよりも並列にコンパイルすることによる最適化の利点はありません。コンパイルされたコードのサイズを見ることで、いつでも確認できます。

この投稿は興味深いかもしれません:

GWT コンパイルのパフォーマンス

于 2014-06-12T16:41:19.310 に答える