5

我有一台能够运行 64 位 Windows 7 的不错的机器。那么,我怎么会在“开发模式”下停止一个小型示例 GWT 应用程序,编辑它并重新启动它,它需要 30 秒才能在浏览器中响应,两者都是最新的Firefox 和最新的 Chrome?

对于当今的 GWT 开发人员来说,那种基于糖蜜的编辑-编译周期只是正常的、预期的事情吗?

对于更现实的应用程序,它会变得更糟吗?或者这 30 秒的全部时间只是框架开销,而我自己的代码不会很快让它变得比这更臃肿吗?

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

谷歌的人是不是拥有比我快得多的机器,在这上面不那么痛苦,还是他们像我们其他人一样受苦?

4

3 回答 3

12

在开发过程中,一个 GWT 应用程序可以在不同的模式下运行,并且对于何时需要

  • 重新启动服务器,
  • 重新加载服务器,
  • 刷新浏览器,
  • 或者只需单击网页中的某处。

让我们退后一步,看看开发模式/生产模式与另一方面“带调试器”/“不带调试器”之间的所有差异。当然,使用 GWT 的每个人都已经听说过它们......

模式

发展模式

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

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

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

生产方式

将客户端作为已编译的 JavaScript 运行。在使用它之前,您必须先使用 GWT Java to JavaScript 编译器(通常称为gwtc,或“带有工具包 图标的那个”)

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

这里的好处是,a) 你可以测试真正的编译结果,b) 浏览器刷新比开发模式快得多。

发射

“没有调试器”

您可以在不附加调试器的情况下简单地运行应用程序(在开发和生产模式下都可以)。如果您使用 Eclipse,请使用“运行方式...”。

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

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

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

开发视图重新加载图标

“带调试器”

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

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

如果您使用附加的调试器进行客户端更改,代码更改将立即生效,因此您所要做的就是单击网页中导致代码运行的某个位置。

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

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

此外,使用调试器时,您必须小心应用程序的状态。请记住,对代码的更改不会重新评估现有状态!


所以你基本上有四种组合

  • 无调试器的开发模式
    • 客户端更改:使用浏览器刷新(中)
    • 服务器更改:重新加载服务器(快速)
  • 带调试器的开发模式
    • 客户端更改/服务器更改:只需单击网页(非常快)。重新启动服务器,如果失败(非常慢)
  • 无调试器的生产模式
    • 客户端更改:重新编译,然后刷新浏览器(非常慢)
    • 服务器更改:重新加载服务器(快速)
  • 带调试器的生产模式(用于服务器端)
    • 客户端更改:重新编译,然后刷新浏览器(非常慢)
    • 服务器更改:只需单击网页即可引起新的服务器调用(非常快)。重新启动服务器,如果失败(非常慢)

其他区别:

  • 生产模式下的简单浏览器刷新比开发模式下要快得多。
  • 生产模式下的 GWT-RPC 比开发模式下要快得多。

每种组合在开发速度和便利性方面都有其自身的优点和缺点。我喜欢使用所有这些,视情况而定。


这篇文章有点长,但是我看到了很多关于这个话题的问题,我想把它写在一个地方。谢谢阅读 :-)

于 2011-05-27T10:06:57.573 回答
6

我想我的回答是以问题的形式,“你确定你真的需要重新启动吗?”

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

我经常不得不在浏览器中重新加载页面才能看到更改,但这是一个不同的问题。

于 2011-05-26T13:29:19.143 回答
2

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

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

于 2011-05-26T13:29:58.503 回答