1. ホーム

[解決済み】gwtコンパイラを高速化する方法は?

2022-04-11 05:38:25

質問

プロジェクトでGWTを多用するようになり、GWTコンパイラのパフォーマンスに悩まされるようになってきた。

GWTコンパイラの実行を後回しにするホストモードブラウザを重視するなど、この問題を軽減するために作業方法の変更を開始する予定ですが、これにはそれなりのリスクがあり、特に実際のブラウザの問題を発見するのがかなり遅れる可能性があります。

理想を言えば、GWTコンパイラ自体をもっと速くしたいですね。かなり小さなアプリケーションのコンパイルに1分もかかるなんて、いい加減にしてほしいです。しかし、私たちは、かなり素朴な方法でコンパイルを使っているので、迅速かつ容易にいくつかの利益を得ることができることを期待しています。

現在、Ant ターゲットから java アプリケーションとして com.google.gwt.dev.Compiler を起動しており、最大ヒープが 256m で、スタックスペースがたくさんあります。コンパイラは、Java6の性能向上を利用するために、fork=trueと最新のJava 6 JREを使用してAntから起動されます。メインコントローラクラスをアプリケーションのクラスパスと一緒にコンパイラに渡すと、実行されます。

他に高速化するためにできることは?より多くの情報を与えて、何をすべきかを発見するのに費やす時間を減らすことはできないでしょうか?

1つのブラウザ用にしかコンパイルしないように指示できるのは知っていますが、マルチブラウザのテストをする必要があるので、それはあまり現実的ではありません。

現時点ではすべての提案を歓迎します。

解決方法は?

GWTのコンパイラの性能は本当にお粗末です。あちこちでハックすることはできますが、大幅にパフォーマンスを向上させることはできません。

パフォーマンスハックとして有効なのは、特定のブラウザのみにコンパイルすることで、次の行を gwt.xml :

<define-property name="user.agent" values="ie6,gecko,gecko1_8"></define-property>

またはgwt 2.xの構文で、1つのブラウザにのみ適用されます。

<set-property name="user.agent" value="gecko1_8"/>

これは、例えば、IEとFFのみに対応したアプリケーションをコンパイルします。もし、テストに特定のブラウザしか使わないことがわかっている場合は、この小さなハックを使うことができます。

もうひとつの方法として、複数のロケールを使用していて、テスト用にひとつだけ使用する場合、それらをすべてコメントアウトして、GWTがデフォルトのロケールを使用するようにすれば、コンパイル時の追加オーバーヘッドをいくらか削減することができます。

結論:コンパイラのパフォーマンスが桁違いに向上するわけではありませんが、いくつかの緩和策を取ることで、あちこちで数分の短縮が可能です。