2

巨大な GWT アプリケーションがあり、コンパイル後にXXX.chace.htmlファイルが生成されます。このファイルは非常に大きく (約 3 MB)、ユーザーは Web ページを読み込むのに 30 秒かかります。コード分​​割を使用する以外に、このファイルを減らす方法はありますか? GZip で圧縮コマンドを使用してみましたが、1.5 MB を超えるファイルが圧縮されないというバグが報告されているようです。

以前にこの問題に直面した人はいますか? どうやって解決できましたか?

4

5 に答える 5

4

コード分​​割を使用すると、コードを分割するのに役立ちます。

残念ながら、それを利用するにはアプリがどのように設定されているかを確認する必要がありますが、アプリがそれほど巨大な場合は、間違いなく恩恵を受けるでしょう.

于 2012-10-01T23:01:40.090 に答える
3

コード分​​割を使用したくない場合は、コードのサイズを小さくすることもできます。ここにいくつかのポインタがあります。

1)各ページのいくつかの段落のように、アプリで多くのテキストを使用していますか?JavaScriptでテキストをインライン化する代わりに、ExternalTextResourceの使用を検討することもできます。

2)アプリで使用するすべてのウィジェットのリストを作成します。それらすべてが本当に必要かどうかを確認してください。たとえば、複数のタイプのLayoutPanelを使用する場合は、LayoutPanelのみを使用することを決定できます。VerticalPanelやHorizo​​ntalPanelを使用している場合は、それらを完全に取り除き、代わりにCSSを使用できます。多くのGWTの投稿から、単純なCSSで十分な場合に、多くのウィジェット(パネル内のパネル内のパネル内など)を使用することを好むことに気付きました。

1つのビューのウィジェットの数を減らすのではなく、ウィジェットを完全に(さらにはウィジェットのクラス全体から)取り除くと、ほとんどの利点が失われることに注意してください。

3)可能な限りUi:Binderを使用します。Ui:Binderには、クラス名、サイズ、テキストウィジェットのテキスト、ツールチップなど、多くの属性を設定できることに注意してください。コードでそれを行う方が効率的だと思います(私はそれを検証しませんでしたが、とにかくそれは良い習慣です)。

4)イベントハンドラーを効率的に使用しているかどうかを確認します。10個のボタン/ラベルが連続している場合は、それぞれにイベントハンドラーをアタッチする必要はなく、コンテナーに1つのハンドラーをアタッチする必要があります。行のすべてのセルをクリックすると同じことが行われる場合(ダイアログボックスが表示されるなど)、各セルにこのコードを含める必要はありません。行をクリックするとキャッチできます。等。

そして、ここにデータポイントがあります。50を超える複雑な「ページ」(個別の場所/ビュー)、30を超えるデータエンティティ、60を超えるカスタムウィジェット、および1,000を超えるテキスト定数を備えたアプリがあります。1.2MBにコンパイルされます。(私はGWT RPCを使用しています)。私はあなたが3MBで何ができるかを想像することしかできません。

于 2012-10-02T01:28:58.473 に答える
3

コンパイルレポートを使用して、コードサイズが大きくなる原因を正確に特定します。次に、最大のクラスまたは文字列を削除してみてください。

于 2012-10-02T08:30:08.820 に答える
3

gwtが必要なコードをコンパイルしていることを確認してください。インターフェイス/抽象型を使用すると、サイズが大きくなる可能性があります。

たとえば、RPC呼び出しでマップを返す場合、gwtは使用可能なマップのすべてのサブタイプを含める必要があります。HashMapのような具象クラスを返すと、これは停止します。これは、gwtコードがJavascriptにコンパイルされるため、必要と思われるすべてのコードをコンパイルするためです。

于 2012-10-02T04:31:51.867 に答える
0

これは別の方向からのアプローチかもしれませんが、Google App Engine が提供するPageSpeed 最適化サービスを使用すると、ユーザーがアプリをロードするのに必要な時間を短縮できます。

無料ではありませんが、通常の GAE 帯域幅コストに加えて、帯域幅転送の GB あたり 0.39 ドルですが、サービスの下で最適化されないようにアプリの一部をオプトアウトすることができます.

于 2012-10-02T13:32:03.423 に答える