我们在GWT之上使用JBoss Errai框架来构建Web应用程序。我们遇到的问题是,当使用优化编译时,应用程序的编译版本已经大约10兆字节。
是否有一种方法可以让GWT / Errai应用程序在加载while cache.js文件之前拆分或以某种方式显示初始页面?
答案 0 :(得分:2)
您可以使用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);
}
}
...最初下载的代码不包含字符串"您好, AJAX"也没有实现Window.alert所需的任何代码。一旦 单击按钮,将达到对GWT.runAsync的调用 代码将开始下载。假设它下载成功,那么 将调用onSuccess方法;因为必要的代码有 下载后,该呼叫将成功。如果下载失败 代码,然后onFailure将被调用。
您可以在文档中找到详细信息:http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html
答案 1 :(得分:2)
我遇到了同样的问题。我的应用程序是8Mo大,我设法通过更改GWT编译选项之一将其减少到800ko:输出样式从详细到混淆。
答案 2 :(得分:1)
如果您不想使用拆分点来实际减少初始有效负载大小,您可以在开头显示一些加载屏幕,因此用户至少知道应用程序正在启动。
这可以通过以下方式轻松完成:
div
显示一些加载动画(example)div
代码<script type="text/javascript" src="app.nochache.js"></script>
div
作为身份证明,例如:loading-icon
onModuleLoad
方法中,加载*.cache.js
后,将div设置为display:none;
和/或将其从DOM中删除