如何使用JQuery加载GWT模块?

时间:2013-06-07 11:41:44

标签: 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的点击链接。

1 个答案:

答案 0 :(得分:1)

我刚才问过answer这个问题。基本上,使用xsiframe链接器编译模块,并使用dinamically生成的<script>标记加载模块:

$("#clickMe").click(function() {
  $('body').append($("<script src=foo/foo.nocache.js />")); 
}

更新

试图找出你需要这种架构的原因,IMO可能你正在尝试一种错误的解决方案。

如果您的所有应用都基于GWT模块,为什么要引入外部JavaScript库?

GWT有自己的机制来面对加速初始加载的问题。我认为你应该创建一个super-gwt模块,其中包含你的应用程序中的所有子模块。

  • 超级模块将是您应用中的唯一EntryPoint,负责处理您的jsp中的链接。可能我会将gwtquery用于该模块,但这取决于您。
  • 应使用code-splitting加载其他模块,因此它们不是EntryPoint而是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"/>
  • 使用closure编译器:-XenableClosureCompiler
  • 删除类元数据:-XdisableClassMetadata
  • 禁用演员:-XdisableCastChecking
  • 优化代码分割:-XfragmentCount 20