3

我有一个 ClientBundle,它定义了一堆TextResourceImageResource元素。

对于我网站上的每个页面,我计划设置一个代码拆分点,它将仅运行该给定页面的视图/演示者。

我的问题是,假设我有一个名为 logo() 的 ImageResource 和一个名为 fooJs() 的文本资源。我只访问MyClientBundle.INSTANCE.logo()和 MyClientBundle.INSTANCE.fooJs() from aGwt.runAsync` 块。

其他页面将访问MyClientBundle.INSTANCE以加载其他图像/文本资源,这些图像/文本资源特定于这些页面(在它们自己的 GWT.runAsync 块中)。但是logo()并且fooJs只会在一个代码拆分中被引用。

我的问题是,logoimage 和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 回答