3

TextResource一連のandImageResource要素を定義する ClientBundle があります。

サイトの各ページに対して、特定のページのみのビュー/プレゼンターを実行するコード分割ポイントを設定する予定です。

私の質問は、logo() という ImageResource と fooJs() というテキスト リソースがあるとします。MyClientBundle.INSTANCE.logo()MyClientBundle.INSTANCE.fooJs() from aGwt.runAsync` ブロックにアクセスするだけです。

他のページはMyClientBundle.INSTANCE、それらのページに固有の他の画像/テキストリソースをロードするためにアクセスします (独自の GWT.runAsync ブロック内)。ただしlogo()、 andfooJsは 1 つのコード分割内でのみ参照されます。

私の質問は、logoイメージとfooJstextResource はコード分割ファイル内にのみバンドルされるのか、それともスタートアップ js または残りのフラグメントに追加されるのかということです。

基本的に私がやろうとしているのは、スクリプトの初期ダウンロード サイズを減らすために、すべてのページの画像/ビュー/プレゼンターを分割することです。

4

1 に答える 1

1

GWT コンパイラが ClientBundle 内の個々のリソースを分割するようです。

次のモジュールを検討してください。

public class ClientBundleCodeSplittingExample implements EntryPoint {

  public interface MyResources extends ClientBundle {
    public static final MyResources INSTANCE = GWT.create(MyResources.class);

    @ClientBundle.Source("resource1.txt")
    public TextResource resource1();

    @ClientBundle.Source("resource2.txt")
    public TextResource resource2();
  }

  /**
   * This is the entry point method.
   */
  public void onModuleLoad() {
    Window.alert("Resource 1: " + MyResources.INSTANCE.resource1().getText());

    GWT.runAsync(new RunAsyncCallback() {
      @Override
      public void onFailure(Throwable throwable) {
        Window.alert("Code download failed");
      }

      @Override
      public void onSuccess() {
        Window.alert("Resource 2: " + MyResources.INSTANCE.resource2().getText());
      }
    });
  }
}

名前が付けられた 2 つのテキスト ファイルを、モジュール エントリ ポイント クラスresource1.txtresource2.txt同じパッケージに入れ、テキスト ファイルの内容として、簡単に識別できる異なる文字列を使用します。オプションを使用してモジュールをコンパイルし、-style PRETTY生成された javascript を調べると、 の内容がresource1.txtメイン モジュールの javascript に含まれており、 の内容がresource2.txt遅延ロードされる JavaScript にのみ含まれていることがわかります。

于 2014-09-08T20:01:18.537 に答える