我目前面临与GWT codesplitting相关的相当具有挑战性的问题,并希望得到一些帮助.
我目前正在研究一个大型的遗留GWT应用程序(MVP之前的日子),我期待基于"portlets"(我们称之为构建我们页面的各种复合小部件)的模块对此应用程序进行代码拆分.部分.
目前我们的模块只是由portlet所包含的软件包标识,但我愿意更改它以更好地适应声音通用的代码分离设计.
关于我如何设计此代码以指示portlet /复合属于特定"模块"然后拆分代码以便第一次加载模块X中的任何portlet /复合,整个模块X被加载的任何想法?
谢谢
小智 1
嗯......通常,这很简单,但我想这不是你真正的问题......
只需使用这个:
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable reason) {
...
}
public void onSuccess() {
...
}
});
Run Code Online (Sandbox Code Playgroud)
onSuccess 方法中的所有内容都将被拆分到另一个 javascript 文件中,然后根据需要加载该文件。
如果您想将组合与其余代码分开,只需将组合的创建放入此 onSuccess 方法中即可。
您还可以嵌套 GWT.runAsync 方法,这样您就可以再次将该部分拆分为不同的部分,例如,首先 GWT.runAsync 加载模块 X,在模块 X 的构造函数中,您可以执行另一个 runAsync,然后加载您的组合。
当然,该部分之间可能存在一些依赖性,这使得编译器很难拆分,但我已经用我的一个项目(大约 40k 行代码)对其进行了测试,并且它的工作方式非常神奇。