3

当我在 Eclipse 中创建时,没有代码拆分选项PresenterWidget,所以我假设我的PresenterWidgetor DialogBox(在 中启动HeaderPresenter)将在HeaderPresenter调用时下载。让我们看看这段代码HeaderPresenter

Button b = new Button("Click me", new ClickHandler() {
  public void onClick(ClickEvent event) {
    MyDialogBox myD=new MyDialogBox(); ///There a lot of Gui (button, grid, css...) on this dialogbox
    myD.show();
  }
});

所以,我的第一个问题是:

MyDialogBox1,当用户访问页面时,webapp 会下载所有的 GUIHeader吗?

2,假设用户Header在同一个浏览器和同一个会话上第二次访问页面,那么 webapp 会下载所有的 GUIMyDialogBox吗?(如果它在同一个会话中,那么我相信它不会再次下载,因为 GUI 在其他地方获得了 Catch)

好的,现在我将按照 Google http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html的建议进行此代码拆分,如下所示:

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() {
        MyDialogBox myD=new MyDialogBox(); ///There a lot of Gui (button, grid, css...) on this dialogbox
        myD.show();
      }
    });
  }
});

我的假设是 Webapp 不会在用户访问Header页面时下载此代码。但是当用户单击按钮“b”时,它将下载代码。但我的问题是

如果你第一次点击按钮,那么它会下载,但是如果用户第二次甚至第三次点击同一个按钮,那么应用程序会在第二次/第三次继续下载相同GUI的按钮吗?DialogBox或者应用程序会在第一次下载时捕捉到GUI其他DialogBox地方的内容吗?当用户第二次/第三次点击时,它会回忆捕捉到的内容,而不是再次下载相同的内容?

我很困惑,谁能解释一下?

另外,是否值得为 big 进行代码拆分DialogBox

4

1 回答 1

6
  • 代码拆分只会在第一次需要时下载东西,所以不用担心,因为用户会有很好的体验,因为:代码在每个会话中加载一次,并且拆分片段因其唯一的名称而永久缓存在浏览器中。

  • 您必须在应用程序中拆分的数量取决于不同的事情,一个是每个片段中的代码量是否足够大,另一个是您的用户可以访问应用程序的一部分(id 管理屏幕)和你不希望其他人总是加载片段,也许你想要快速加载登录屏幕等。所以如果你提到的这个大对话框总是被所有用户使用,我不会拆分它,除非有其他原因就像第一次快速加载页面一样。

  • 我建议查看compile-report输出,这样您就可以看到每个片段中的代码量是多少,以及是否值得在代码中设置每个拆分点。

  • 最后,编译器中有一个名为fragmentCount的新功能,使用它可以优化应用程序中的片段数量。

于 2013-10-12T11:15:23.483 回答