我什么时候应该使用Code Splitting ?,拆分片段加载一次吗?

时间:2013-10-12 08:46:07

标签: gwt gwtp

没有Code Splitting选项当我在Eclipse中创建PresenterWidget时,我假设我的PresenterWidgetDialogBox(在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();
  }
});

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

第1,当用户访问页面MyDialogBox时,webapp会下载Header的所有GUI吗?

第二,假设用户在同一浏览器上第二次来到Header页&也是SAME会话,那么webapp会下载MyDialogBox的所有GUI吗? (如果它在同一个会话中,那么我相信它不会再次下载,因为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();
      }
    });
  }
});

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

如果您第一次点击该按钮,则会下载,但如果用户第二次甚至第三次点击同一按钮,该应用会继续下载GUI DialogBox在第二次/第三次?或者当应用程序第一次下载时,应用程序会抓住GUI其他地方的DialogBox当用户点击第二次/第三次时它会调用捕获而不是再次下载相同的东西?

我很困惑,有人可以澄清吗?

此外,是否值得对大DialogBox进行代码拆分?

1 个答案:

答案 0 :(得分:6)

  • 代码分割仅在第一次需要时下载内容,所以不要担心,因为用户将获得良好的体验,因为:每个会话加载一次代码,并在浏览器中缓存分段片段因为它的独特名称。

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

  • 我建议您查看compile-report输出,以便了解每个片段中的代码量,以及代码中每个分割点是否值得。< / p>

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