12

アプリのパーツ間に適切な URL を提供するために、すべてを個別にコンパイルされるいくつかのモジュールに分割します。たとえば、「管理者」部分と「編集者」部分があります。エディターが新しいウィンドウで起動します。これにより、エディターに直接リンクできます。

/com.example.EditorApp?id=1

EditorApp モジュールは、id の値を取得してドキュメントをロードするだけです。

これに関する問題は、2 つのモジュール間で共通のすべてのコードが出力で複製されることです。これには、静的コンテンツ (グラフィック)、スタイルシートなどが含まれます。

もう 1 つの問題は、2 回処理する必要がある両方のモジュール間で複雑なコードを共有しているため、JavaScript を生成するためのコンパイル時間がほぼ 2 倍になることです。

誰かがこれに対処しましたか?個別のモジュールを破棄し、すべてを 1 つのコンパイル ターゲットにマージすることを検討しています。唯一の欠点は、「アプリ」間の URL が次のようになることです。

/com.example.MainApp?mode=editor&id=1

すべてのウィンドウは、メイン モジュールをロードし、mode パラメータの値をチェックして、適切なモジュールの初期化コードを呼び出します。

4

3 に答える 3

8

私はGWTでいくつかの非常に大きなアプリケーションを構築しましたが、モジュールに分割し、あなたが行ったように、共通のコードを独自の領域に移動するのが最善だと思います。この場合の理由は単純で、アプリケーションの一部が他の部分とは大きく異なるため、コンパイルサイズの観点からは理にかなっています。私たちのアプリケーションは、メインセクションでは300kbに​​、他のセクションでは約25〜40kbにコンパイルされました。それらをすべて1つにまとめた場合、ユーザーには600kbのダウンロードが残されていたはずですが、これは受け入れられませんでした。

また、このプロジェクトで構築した多くのモジュールを再利用してきたため、設計と再利用の観点から、可能な限り物事を分離する方が理にかなっています。

コンパイル時間は、モジュールが分かれている場合に実際に高速化できるため、一般的に心配する必要はありません。antを使用してプロジェクトをビルドし、変更されたGWTのみをコンパイルするように設定しました。開発中は、1つのブラウザーのみをビルドするように設定しました。プロジェクトの通常のコンパイル時間は、20秒で、多くのコードがあります。あなたはここでこれの例を見ることができます。

もう1つのマイナーなこと:生成されるデフォルトのGWTパスを使用する必要がないことを知っていると思いますか?したがって、com.MyPackage.Packageの代わりに、「ui」などの名前の付いたフォルダーに入れることができます。コンパイルされると、GWTはどこに配置してもかまいません。また、すべて同じディレクトリから実行されるため、パスの変更の影響を受けません。

于 2008-12-01T23:51:19.663 に答える
4

GWT アプリを構築した私の経験から、複数のモジュール (エントリ ポイントの有無にかかわらず) が必要か、またはすべてが 1 つにまとめられているかを決定する際に考慮すべき点がいくつかあります: ダウンロード時間 (Javascript バンドル サイズ)、コンパイル時間、ナビゲーション/URL、および保守性/再利用性。

...ダウンロード時間ごとに、コード分割により、パフォーマンス上の理由で異なるモジュールに分割する必要がほとんどなくなります。

...コンパイル時間ごとに、大きなアプリでもコンパイルは非常に高速ですが、巨大なアプリの場合は分割するのに役立つ場合があります。

...各モジュールには独自のクライアント側の状態があり、ナビゲーションはモジュール間でシームレスではないため、ナビゲーション/URL ごとに、あるモジュールから別のモジュールに移動するのは面倒な場合があります (異なる EntryPoints を想定)。

...保守性/再利用性のために、組織/構造の観点から、個別のモジュールに分割すると役立つ場合があります (EntryPoint が 1 つしかない場合でも)。

役に立つ場合に備えて、 GWT Modules の使用に関するブログ投稿を書きました。

于 2011-02-22T19:23:54.677 に答える
1

Ok。プロジェクトは非常に多様であるため、「正しい」答えは実際には存在しないと感じています。アプリケーションの性質に大きく依存します。

私たちの主なビルドは、多数の社内モジュールとサードパーティ モジュールで構成されています。それらはすべて別のプロジェクトで管理されます。いろいろなところで使われているので当然です。

しかし、1 つの完全なアプリケーションとして動作するように設計された 1 つのプロジェクトに複数のモジュールを含めると、物事が複雑になりすぎているようです。2 つのモジュールの本来の理由は、新しいウィンドウで別の画面を開くときに URL をシンプルに保つことでした。複数のビルド ターゲットがあったとしても、それらはすべて非常に大きな共通のコード サブセット (カスタム XML/POJO マーシャリング ライブラリを含む) を使用します。

サイズについて... 私たちにとって、1 つのモジュールは 280KB で、もう 1 つのモジュールは 300KB 強でした。

すべてを 1 つのモジュールにマージし終えました。新しい結合モジュールは約 380KB です。したがって、ほとんどの人が両方の画面を使用するため、実際にはダウンロードが少し少なくなります.

また、アプリが変更されない限り、380KB が一度だけダウンロードされるように、完全なキャッシュがあることも忘れないでください。

于 2008-12-03T20:40:55.897 に答える