我有一个ClientBundle,它定义了一堆TextResource
和ImageResource
个元素。
对于我网站上的每个页面,我计划设置一个代码分割点,它将仅运行该给定页面的视图/演示者。
我的问题是,我说有一个名为logo()的ImageResource,以及一个名为fooJs()的文本资源。我只访问MyClientBundle.INSTANCE.logo()
和MyClientBundle.INSTANCE.fooJs()from a
Gwt.runAsync`阻止。
其他页面将访问MyClientBundle.INSTANCE
以加载其他图像/ textResources,这些图像/ textResources特定于这些页面(在他们自己的GWT.runAsync块中)。但logo()
和fooJs
只会在一次代码拆分中被引用。
我的问题是,logo
图片和fooJs
textResource是否只会捆绑在代码拆分文件中,还是会被添加到启动js中,还是会添加到片段左侧?
基本上我要做的就是为每个页面拆分图像/视图/演示者,以减少脚本的初始下载大小。
答案 0 :(得分: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.txt
和resource2.txt
的文本文件,其中包含不同且易于识别的字符串作为文本文件的内容。如果使用选项-style PRETTY
编译模块并检查生成的javascript,您可以看到resource1.txt
的内容包含在主模块javascript中,resource2.txt
的内容是只包含在将被加载的javascript中。