6

2 年前に UiBinder のパフォーマンスに関する回答を読みましたhttps://stackoverflow.com/a/3755675/1067931 そして、それをテストすることにしました。

多数のボタンとパネルを別のパネルに配置した、非常に複雑なレイアウトを作成しました。 バージョン 1のレイアウトは純粋に UiBinder xml で構築されていましたが、バージョン 2は純粋にプログラムで構築されていました。

両方のバージョンを App Engine にデプロイし、実行する前にブラウザのキャッシュをクリアしながら、両方のバージョンを実行しました。バージョン 1 (UiBinder) は~12 秒後にロードされ、バージョン 2は~3 秒後にロードされたため、UiBinder の使用を本当に思いとどまらせました。印象が違いましたか?

4

2 に答える 2

2

UiBinderは、他のGWTジェネレーターと同様に、Javaコードを生成します。したがって、最初に、生成されたものを読み、それを手動で記述しているものと比較します(-genGWTコンパイラまたはDevModeにオプションを渡して、生成されたコードをディスクに書き込みます)。

UiBinderが優れているのはHTMLPanel、I18Nです。これは、Javaで記述した場合よりもコードがはるかに読みやすくなるためです。

GWT 2.5ではIsRenderableRenderablePanel実験的な機能として、特定の条件下でパフォーマンスを向上させることもできます(orkutのパフォーマンスを向上させるために作成されました)。繰り返しになりますが、UiBinderを使用すると、使いやすくなります(IsRenderableそれ以外の場合は、メソッドを適切な順序で、適切なタイミングで呼び出して最大のパフォーマンスを得る必要があります。UiBinderはこれを透過的にします)。残念ながら、他のIsRenderableウィジェットはありません。そのため、;RenderablePanelを実装する独自のウィジェットを作成する場合にのみ役立ちます。非常に低いレベルで動作しますIsRenderableIsRenderable

一般的に言って、UiBinderは、手書きのコードよりもパフォーマンスが遅くならないようにする必要があります(もちろん、ウィジェットの同等の配置の場合)。UiBinderのパフォーマンスが(外部で)優れていると言われるのは、レイアウトにパネルではなくIsRenderable使用することをお勧めするということです。HTMLPanelたとえばHTMLPanel、HTML<table>またはセットを含むことは、または一連<div>のsよりもはるかに高速に実行されます(レイアウトを動的に変更する必要がないと仮定します)。FlexTableFlowPanel

于 2012-10-17T16:15:55.473 に答える
1

UiBinder-Code を使用すると起動時間が長くなる可能性があることは、直感的に正しいと思います。理由は次のとおりです。

ビューで 20 個のボタンを定義しようとしているとします。宣言型レイアウトでは各ボタンを明示的に宣言しますが、命令型レイアウトでは for ループを使用する可能性が高くなります。これにより、命令型レイアウトの JS サイズが小さくなる可能性があります。

また、実際のアプリケーションでは、ビューは通常プロジェクトの最小部分であるため、この違いは無視できる可能性があることも考慮してください。

UiBinderのドキュメントでは、ランタイム パフォーマンスが重要であることが示唆されているようです。そのため、ロード時間の短縮に関心がある場合は、
Code Splitting
HTML5 Appcache
、および一般的なパフォーマンスのヒントを参照することをお勧めします(少し時代遅れですが、それでも非常に便利です)。 !)

質問ありがとうございます。GWT 機能 ( UiBinder など) の広範なパフォーマンス テスト スイートを検索しましたが、何も見つかりませんでした。

于 2012-10-17T12:06:15.287 に答える