【发布时间】:2010-09-27 10:05:37
【问题描述】:
我们有一个非常大的 GWT 项目,它产生了一个大小约为 2Mb 的单体应用程序。打破它的明显方法是使用分割点。例如,我们的应用程序是菜单驱动的,因此每个菜单操作背后的逻辑可能是一个拆分点。此外,调用 GWT RPC 的代码也可以是一个分割点。通过这种方式,一个 2Mb 的应用程序可能会分解为一个 300K 的启动应用程序,其余的在首次使用时加载。
GWT 将对 GWT.runAsync() 的调用视为可以将 JS 分解为在运行时异步加载的较小部分的地方。例如要设置调用 doSomething() 的分割点,我们这样写:
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable caught) {
Window.alert("Oh dear could not load app");
}
public void onSuccess() {
doSomething();
}
});
GWT 编译器将看到此代码并将其标记为候选代码,以便将代码拆分成更小的片段,这些片段将在首次使用时加载。
我们遇到的问题是,如果我们将分割点放入代码中,构建实际上需要 10-50 倍的时间来执行。我猜在处理包含大量类的项目时,代码效率不是很高。所以 2 分钟的构建变成了 20-100 分钟的构建,这是不可接受的。
所以问题是,除非我明确要求,否则我如何才能将拆分点放入代码中但防止编译器拆分?我设想日常开发将忽略拆分点,但夜间或生产构建会拆分。
有什么想法吗?
【问题讨论】: