0

我们的应用程序有许多随着时间的推移而开发的大型 GWT 模块。架构是 Servlets/JSP 和 GWT。

我在这里简化。
Link1.jsp 包含Link1 GWT module
Link2.jsp包含Link2 Gwt module
Link3.jsp 包含Link3 GWT module

以上 3 个 jsps 都是相同的,即包含相同的页眉和页脚。只有 body 基于 GWT 模块发生变化。

现在,我们正在尝试提高用户单击上述链接时的性能。当用户单击Link1.jsp时,请求被发送到服务器并且响应在500-700 毫秒内返回。(我们在印度,因此存在延迟问题)用户抱怨每次链接点击的应用程序都很慢。

因此,我们正在尝试以下操作:由于所有 jsps 完全相同,只有主体在更改,因此我们决定不制作default href request上述链接,而是尝试使用 JQuery 根据点击链接加载不同的 GWT 模块。

4

1 回答 1

1

前段时间我确实回答了这个问题。基本上,使用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加载,所以它们不是EntryPointbut 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
于 2013-06-07T13:06:05.243 回答