GWT cache.js太大了 - 花时间让应用显示

时间:2017-02-27 08:24:07

标签: java gwt errai

我们在GWT之上使用JBoss Errai框架来构建Web应用程序。我们遇到的问题是,当使用优化编译时,应用程序的编译版本已经大约10兆字节。

是否有一种方法可以让GWT / Errai应用程序在加载while cache.js文件之前拆分或以某种方式显示初始页面?

3 个答案:

答案 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中删除