为了在应用程序的各个部分之间提供漂亮的URL,我们将所有内容分成几个独立编译的模块.例如,存在"管理器"部分和"编辑器"部分.编辑器在新窗口中启动.通过这样做,我们可以直接链接到编辑器:
/com.example.EditorApp?id=1
EditorApp模块只获取id的值并加载文档.
这个问题是两个模块之间共有的所有代码都在输出中重复.这包括任何静态内容(图形),样式表等.
另一个问题是生成JavaScript的编译时间几乎是两倍,因为我们在两个模块之间共享一些复杂的代码,这些代码必须被处理两次.
有没有人处理过这个?我正在考虑废弃单独的模块并将它们全部合并到一个编译目标中.唯一的缺点是我们的"应用程序"之间的URL变成了:
/com.example.MainApp?mode=editor&id=1
每个窗口都加载主模块,检查mode参数的值,并调用相应的模块init代码.
我已经在GWT中构建了一些非常大的应用程序,我发现最好将这些应用程序拆分为模块,并将公共代码移动到它自己的区域,就像你已经完成的那样.我们的情况很简单,我们的应用程序的某些部分与其他部分非常不同,所以从编译大小的角度来看它是有意义的.我们的应用程序编译为主要部分300kb,其他部分约25-40kb.如果我们只把它们全部放在一个用户身上就会有600kb的下载,这对我们来说是不可接受的.
从设计和可重用性的角度来看,它也更有意义,尽可能地分离出来,因为我们已经重新使用了我们在这个项目上构建的许多模块.
编译时间不是您通常应该担心的事情,因为如果您有单独的模块,您实际上可以加快速度.我们使用ant构建我们的项目,并且我们将其设置为仅编译已更改的GWT,并且在开发期间仅为一个浏览器构建,我们项目的典型编译时间为20秒,并且我们有很多代码.你可以在这里看到这个例子.
另一个小问题:我假设您知道您不必使用它生成的默认GWT路径吗?因此,您可以将其放入一个名称如'ui'之类的文件夹中,而不是com.MyPackage.Package.编译完成后,GWT并不关心你放置它的位置,并且对路径更改不敏感,因为它都是从同一目录运行的.