没有Code Splitting选项当我在Eclipse中创建PresenterWidget
时,我假设我的PresenterWidget
或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();
}
});
所以,我的第一个问题是:
第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
进行代码拆分?
答案 0 :(得分:6)
代码分割仅在第一次需要时下载内容,所以不要担心,因为用户将获得良好的体验,因为:每个会话加载一次代码,并在浏览器中缓存分段片段因为它的独特名称。
您在应用程序中必须执行的拆分数量取决于不同的事情,一个是每个片段中的代码量是否足够大,另一个是您有访问应用程序的一部分的用户(id管理员屏幕),你不希望别人总是加载片段,也许你想要快速加载登录屏幕,等等。所以如果你提到的这个大的DialogBox总是被所有用户使用,我不会拆分它,除非有其他原因,如第一次快速加载页面。
我建议您查看compile-report输出,以便了解每个片段中的代码量,以及代码中每个分割点是否值得。< / p>
最后,编译器中有一个名为fragmentCount的新功能,玩这个功能可以优化应用中的片段数量。