如果基本,示例GWT应用程序在浏览器中加载需要30秒,这正常吗?真正的应用程序需要2分钟吗?

如果基本,示例GWT应用程序在浏览器中加载需要30秒,这正常吗?真正的应用程序需要2分钟吗?,gwt,browser,performance,tweak,Gwt,Browser,Performance,Tweak,我有一台可以运行64位Windows7的像样的机器。那么,为什么每次我在“开发模式”下停止一个小样本GWT应用程序,编辑它并重新启动它,在最新的Firefox和最新的Chrome浏览器中都需要30秒才能做出响应呢 这种基于糖蜜的编辑编译周期是GWT开发人员现在所期望的正常现象吗 对于更现实的应用程序来说,情况会变得更糟吗?或者整个30秒只是框架开销,而我自己的代码在短期内不会让它变得更臃肿 这个问题可以通过使用其他“模式”或任何其他调整解决方案来缓解吗 谷歌人的机器速度比我快得多吗?他们的痛苦比

我有一台可以运行64位Windows7的像样的机器。那么,为什么每次我在“开发模式”下停止一个小样本GWT应用程序,编辑它并重新启动它,在最新的Firefox和最新的Chrome浏览器中都需要30秒才能做出响应呢

这种基于糖蜜的编辑编译周期是GWT开发人员现在所期望的正常现象吗

对于更现实的应用程序来说,情况会变得更糟吗?或者整个30秒只是框架开销,而我自己的代码在短期内不会让它变得更臃肿

这个问题可以通过使用其他“模式”或任何其他调整解决方案来缓解吗


谷歌人的机器速度比我快得多吗?他们的痛苦比我小得多吗?还是他们像我们其他人一样痛苦?

我想我的答案是一个问题,“你确定你真的需要重新启动吗?”

假设您在浏览器中运行它(听起来像是这样),那么几乎在您完成更改后,大多数更改都是“热门”的。我花了昨天的时间对模块中的主代码文件进行了各种更改,并且不必为任何更改重新启动服务器


我经常不得不在浏览器中重新加载页面以查看更改,但这是另一个问题

在GWT开发模式下,每次重新加载页面时,开发服务器都会重新编译GWT应用程序的源代码。这使您只需对GWT代码进行一些更改,然后在浏览器中重新加载页面即可查看更改—无需重新启动开发模式服务器


在生产服务器上部署应用程序时,部署的是已编译的javascript文件。因此,您将看到的延迟将是加载这些页面的时间。

在开发过程中,GWT应用程序可以在不同的模式下运行,并且对于何时需要加载,通常会有一些困惑

  • 重新启动服务器
  • 重新加载服务器
  • 刷新浏览器
  • 或者只需单击网页中的某个位置
让我们后退一步,看看开发模式/生产模式与“带调试器”/“不带调试器”之间的所有差异。当然,使用GWT的每个人都听说过它们

模式 发展模式 使用附加到代码服务器的特殊浏览器插件运行客户端。您可以通过查看URL轻松识别此模式-它将包含类似于
?gwt.codesvr=127.0.0.1:9997的内容

开发模式的主要优点是,它不需要您首先将代码编译为JavaScript—它在代码服务器中以Java字节码的形式运行客户端。这基本上是一个JavaScript模拟——但它非常接近,以至于大多数人不再注意到差异(有些人甚至认为GWT在开发模式下将Java编译成JavaScript,)

由于代码以Java字节码的形式运行,因此此模式还允许您为客户端代码附加一个调试器,我们将在下面看到(但您不必!)

生产方式 以编译JavaScript的形式运行客户端。在使用它之前,必须首先使用GWT Java to JavaScript编译器(通常称为
gwtc
,或“具有 图标“)

完成后(需要一段时间!)只需像在开发模式中一样启动GWT嵌入式服务器,但这次从URL中删除
?GWT.codesvr=127.0.0.1:9997
。(或者,您可以将war部署到单独的服务器(例如Tomcat),并从那里运行它。)

这里的优点是,a)您可以测试实际编译的结果,b)浏览器刷新速度比开发模式快得多

发射 “没有调试器” 您只需运行应用程序而无需附加调试器(这在开发和生产模式下都是可能的)。如果使用Eclipse,请使用“运行方式…”

在开发模式中,这意味着您运行一个web服务器(嵌入式Jetty,通常在8888端口上)和一个代码服务器(通常在9997端口上)。在生产模式下,您不需要代码服务器

如果您有客户端更改,则刷新浏览器时将重新加载这些更改。这是相对快速的-您不必重新启动(代码)服务器。但它不像调试器那样直接

如果您有服务器端更改,则必须重新加载服务器web应用程序(在Eclipse中,您在“开发”视图中使用黄色的小重新加载图标),这比完全重新启动服务器要快得多,但再一次,它不像使用调试器那样即时

“使用调试器” 在开发和生产模式下,都可以使用附加的调试器运行应用程序。如果使用Eclipse,请使用“调试为…”

对于开发模式,调试器同时附加到代码的客户端和服务器端,而在生产模式下,它只能附加到服务器端

如果使用附加的调试器对客户端进行了更改,则代码更改将立即生效,因此您只需单击网页中的某个位置,即可使代码运行

如果使用附加的调试器对服务器端进行了更改,同样,代码更改将立即生效,因此您所要做的就是执行一些导致相应服务器调用的操作

所有这些都非常快,但缺点是Java调试器只能处理某些类型的代码更改。如果您有更严重的更改,调试器将退出,您将不得不重新启动服务器(在这种情况下,我仍在寻找重新加载和重新连接的方法-我认为这应该是可能的,但是否有人已经有了工作解决方案?)

此外,使用调试器时,您必须小心应用程序的状态