如何使用JQuery加载GWT模块?
我们的应用程序有许多大型GWT模块随着时间的推 架构是Servlets / JSP和GWT。
我在这里简化。
Link1.jsp
包含Link1 GWT module
Link2.jsp
包含Link2 Gwt module
Link3.jsp
包含Link3 GWT module
。
所有上述3个jsps都是相同的,即包括相同的页眉和页脚。 只有机构正在根据GWT模块进行更改。
现在,我们正在尝试在用户点击上述链接时提高性能。 当用户点击Link1.jsp
,请求被发送到服务器,响应将在500-700ms回复。(我们在印度,因此存在延迟问题 )用户抱怨每个链接的应用程序运行缓慢单击。
因此,我们正在尝试以下方法:由于所有jsps完全相同且只有正在更改,我们决定不对上述链接进行default href request
,我们尝试使用单击链接加载不同的GWT模块JQuery的。
我刚才回答了这个问题。 基本上,使用xsiframe
链接器编译模块,并使用dinamically生成的标记加载模块:
$("#clickMe").click(function() { $('body').append($("")); }
更新:
试图弄清楚为什么你需要这种架构,IMO可能你正在尝试一个错误的解决方案。
如果您的所有应用程序都基于GWT模块,为什么要引入外部JavaScript库?
GWT有自己的机制来面对加速初始加载的问题。 我认为你应该创建一个super-gwt模块,其中包含你的应用程序中的所有子模块。
- 超级模块将是您应用中的唯一
EntryPoint
,并负责处理您的jsp中的链接。 可能我会将gwtquery用于该模块,但这取决于你。 - 应使用代码分割加载其他模块,因此它们不是
EntryPoint
而是RunAsyncCallback
。
这种解决方案的优点很多。 并且您将拥有一个非常快速加载的应用程序:
- 你不加载像jquery这样的外部库:大约100KB压缩。
- 加载的第一个片段是超小的,如果你使用gquery可能是30-50 KB(比jquery本身少得多)
- 模块共享的许多代码(gwt-core,jre等)可以转到第一个片段,并由所有模块共享,从而减少每个模块的最终下载大小。
- 这是一个开箱即用的解决方案,gwt编译器可以很好地分割代码并添加所有内容以在需要时异步加载它。
- 正确配置您的Web服务器,客户端将永久缓存该应用程序。
- Java生态系统促进模块化应用
GWT-2.5.1中减少js大小的另一个选项是:
- 删除堆栈代码:
- 预压缩您的js文件:
- 使用闭包编译器:
-XenableClosureCompiler
- 删除类元数据:
-XdisableClassMetadata
- 禁用铸件:
-XdisableCastChecking
- 优化代码分割:
-XfragmentCount 20