前段时间我确实回答了这个问题。基本上,使用xsiframe
链接器编译模块并使用动态生成的<script>
标签加载模块:
$("#clickMe").click(function() {
$('body').append($("<script src=foo/foo.nocache.js />"));
}
更新:
试图弄清楚为什么你需要这种架构,IMO 也许你正在尝试一个错误的解决方案。
如果您的所有应用程序都基于 GWT 模块,为什么要引入外部 javascript 库?
GWT 有自己的机制来面对加速初始加载的问题。我认为您应该创建一个 super-gwt-module,其中包含您在应用程序中拥有的所有子模块。
- 超级模块将是
EntryPoint
您的应用程序中的唯一模块,并负责处理您的 jsp 中的链接。可能我会为那个模块使用gwtquery,但这取决于你。
- 其他模块应该使用code-splitting加载,所以它们不是
EntryPoint
but RunAsyncCallback
。
这种解决方案的优点很多。您将拥有一个加载速度非常快的应用程序:
- 你不加载像 jquery 这样的外部库:大约 100KB 压缩。
- 如果您使用 gquery,要加载的第一个片段将非常小,可能 30-50 KB(远小于 jquery 本身)
- 模块共享的许多代码(gwt-core、jre 等)可以转到第一个片段并由所有模块共享,从而减少每个模块的最终下载大小。
- 这是一个开箱即用的解决方案,gwt 编译器可以很好地拆分代码并添加所有内容以在需要时异步加载它。
- 正确配置您的网络服务器,客户端将永远缓存应用程序。
- Java 生态系统促进了模块化应用程序。
GWT-2.5.1 中减小 js 大小的另一个选项是:
- 删除堆栈代码:
<set-property name="compiler.stackMode" value="strip"/>
- 预压缩你的 js 文件:
<inherits name="com.google.gwt.precompress.Precompress"/>
- 使用闭包编译器:
-XenableClosureCompiler
- 删除类元数据:
-XdisableClassMetadata
- 禁用铸件:
-XdisableCastChecking
- 优化分码:
-XfragmentCount 20