GWT cache.js太大 - 需要时间才能显示应用
问题描述:
我们在GWT之上使用JBoss Errai框架来构建Web应用程序。我们遇到的问题是编译版本的应用程序在使用优化进行编译时已经大小约为10兆字节。GWT cache.js太大 - 需要时间才能显示应用
GWT/Errai应用程序是否有一种方法可以在加载while cache.js文件之前拆分或以某种方式显示初始页面?
答
您可以使用Code Splitting机制。
要拆分您的代码,只需在 ,你希望程序能够暂停 下载更多的代码的地方插入调用该方法
GWT.runAsync
。这些位置被称为分割点。
例如:
public class Hello implements EntryPoint {
public void onModuleLoad() {
Button b = new Button("Click me", new ClickHandler() {
public void onClick(ClickEvent event) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable caught) {
Window.alert("Code download failed");
}
public void onSuccess() {
Window.alert("Hello, AJAX");
}
});
}
});
RootPanel.get().add(b);
}
}
...最初下载不包括字符串 “Hello, AJAX”,也不实行Window.alert任何必要的代码。一旦点击了 按钮,就会到达对GWT.runAsync的调用,并且 代码将开始下载。假设它成功下载,将会调用onSuccess方法的 ;由于必要的代码已下载 ,该调用将会成功。如果没有下载 代码,则将调用onFailure。
你会发现在文档的详细信息:http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html
答
如果你不想使用分割点实际上降低初始有效载荷的大小,你可以展示的开头有一些加载屏幕,让用户知道在至少应用程序正在启动。
这可以很容易地做到:
- 添加
div
显示您hostpage - 的
div
应您的<script type="text/javascript" src="app.nochache.js"></script>
标记之前增加了一些加载动画(example) - 给该
div
一个id ,例如:loading-icon
- 在
onModuleLoad
方法中,在*.cache.js
已被加载后,通过设置删除div婷它display:none;
和/或从DOM
实际上,我寻找的东西会为Errai – xybrek
这是不可能的,你会发现专门针对Errai一些工作中移除(因为它是相当非流行)但是代码分裂,正如前面提到的那样,它是一个基本的GWT机制,并且正在解决您确切的问题;所以你很有可能会为你工作(除非Errai做了一些事情来专门让你避免使用代码拆分) – Andrei
我不会说Errai不受欢迎,我听说过它的好处。不知道Errai,虽然我不能理解(并且会同意Errai通过生成一些难以/不可能为GWT编译器进行优化的代码人为地增加了膨胀;可能取决于您使用的Errai功能) –