我目前面临与GWT codesplitting相关的极具挑战性的问题,并希望得到一些帮助。
我目前正在研究一个大型遗留GWT应用程序(MVP之前的日子),我期待基于“portlets”(我们称之为构建页面的各种复合小部件)的模块来代码拆分此应用程序with)是。的一部分。
目前我们的模块只是由portlet所包含的软件包标识,但我愿意更改它以更好地适应声音通用的代码分割设计。
关于如何设计此代码以指示portlet / composite属于特定“模块”然后拆分代码以便第一次加载模块X中的任何portlet / composite,整个模块的任何想法X被加载?
由于
答案 0 :(得分:1)
只需使用:
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable reason) {
...
}
public void onSuccess() {
...
}
});
然后将onSuccess方法中的所有内容拆分为另一个javascript文件,然后按需加载。
如果您想从其余代码中分离复合材料,只需将复合材料的创建放在此onSuccess方法中。
您还可以嵌套GWT.runAsync方法,因此您可以在不同的部分再次拆分部件,例如第一个GWT.runAsync加载模块X,在模块X的构造函数中你可以做另一个runAsync然后加载你的组合。
但是,部件之间可能存在一些依赖关系,这使得编译器难以拆分,但我已经使用我的一个项目(大约40k行代码)对其进行了测试,并且它就像一个魅力。
答案 1 :(得分:0)
Packagaing与代码分割没有多大关系,使代码分裂工作的主要因素是类之间的意外纠缠。如果一个类需要另一个等等,最终到达并抓住所有类,那么代码拆分就不能很好地分解成许多,因为需要第一个的行为意味着一切都是必需的。如果你将你的问题分开,即松散耦合,那么你应该能够拥有一个非常适合分裂的东西。
答案 2 :(得分:0)
如何使用GWTP - 它是一个很好的MVP框架,它们为您提供自动代码分割。您必须重新组织代码库,才能为要拆分的每个模块使用演示者/视图。然后添加codesplitting就像向演示者添加以下行一样简单:
@ProxyCodeSplit
@NameToken("firstpage")
public interface MyProxy extends ProxyPlace<FirstPagePresenter> {}
GWTP还有一个Eclipse插件,可以生成大部分样板代码。