在开发过程中,一个 GWT 应用程序可以在不同的模式下运行,并且对于何时需要运行常常会有些困惑
- 重新启动服务器,
- 重新加载服务器,
- 刷新浏览器,
- 或者直接点击网页中的某处。
让我们退一步看一下开发模式/生产模式和“With Debugger”/“Without Debugger”之间的所有区别另一方面。当然,使用 GWT 的每个人都已经听说过它们......
模式
开发模式
使用附加到代码服务器的特殊浏览器插件运行客户端。您始终可以通过查看 URL 轻松识别此模式 - 它将包含类似 ?gwt.codesvr=127.0.0.1:9997
开发模式的主要优点是,它不需要您首先将代码编译为 JavaScript - 它在代码服务器中以 Java 字节码的形式在客户端运行。这基本上是一个 JavaScript 模拟 - 但它是如此接近,以至于大多数人不再注意到差异(有些人甚至认为 GWT 在开发模式下将 Java 编译为 JavaScript,which is not the case。)
由于代码作为 Java 字节码运行,这种模式还允许您为客户端代码附加调试器,我们将在下面看到一点点(但您不必!)
生产模式
将客户端作为已编译的 JavaScript 运行。在使用它之前,您必须先使用 GWT Java to JavaScript 编译器(通常称为gwtc,或“带有
图标")
完成后(需要一段时间!)只需像在开发模式下一样启动 GWT 嵌入式服务器,但这次从您的 URL 中删除 ?gwt.codesvr=127.0.0.1:9997。 (或者,您可以将战争部署到单独的服务器(例如 Tomcat),然后从那里运行。)
这里的好处是,a) 你可以测试真正的编译结果,b) 浏览器刷新比开发模式下快得多。
启动
“没有调试器”
您可以在不附加调试器的情况下简单地运行应用程序(在开发和生产模式下都可以)。如果您使用 Eclipse,请使用“运行方式...”。
在开发模式下,这意味着您运行 Web 服务器(嵌入式 Jetty,通常在端口 8888 上)和代码服务器(通常在端口 9997 上)。在生产模式下,您不需要代码服务器。
如果您有客户端更改,它们将在您刷新浏览器时重新加载。这相对较快 - 您不必重新启动(代码)服务器。但它不像使用调试器那样直接。
如果您有服务器端更改,您将不得不重新加载服务器 Web 应用程序(在 Eclipse 中,您使用开发视图中的黄色小重新加载图标)这比完全加载要快得多服务器重新启动,但再一次,它不像使用调试器那样立即!
“带调试器”
在开发和生产模式下,您都可以使用附加的调试器运行应用程序。如果您使用 Eclipse,请使用“Debug As...”。
对于开发模式,调试器会附加到代码的客户端和服务器端 - 而在生产模式下,它只能附加到服务器端!
如果您有带有附加调试器的客户端更改,代码更改将立即生效,因此您只需单击网页中的某个位置即可运行代码。
如果您有服务器端更改并附带调试器,同样,代码更改将立即生效,因此您只需执行一些导致相应服务器调用的操作。 p>
所有这些都非常快,但缺点是 Java 调试器只能处理某些类型的代码更改。如果您有更严重的更改,调试器将退出,并且您将不得不重新启动服务器 (在这种情况下,我仍在寻找一种重新加载和重新附加的方法 - 我认为这应该是可能的,但是有人已经有了可行的解决方案吗?)
此外,使用调试器时,您必须小心应用程序的状态。请记住,对代码的更改不会重新评估现有状态!
所以你基本上有四种组合
- 没有调试器的开发模式
- 客户端更改:使用浏览器刷新(中)
- 服务器更改:重新加载服务器(快速)
- 带调试器的开发模式
- 客户端更改/服务器更改:只需单击网页(非常快)。重新启动服务器,如果失败(非常慢)。
- 没有调试器的生产模式
- 客户端更改:重新编译,然后刷新浏览器(非常慢)
- 服务器更改:重新加载服务器(快速)
- 带调试器的生产模式(用于服务器端)
- 客户端更改:重新编译,然后刷新浏览器(非常慢)
- 服务器更改:只需单击网页即可引起新的服务器调用(非常快)。重新启动服务器,如果失败(非常慢)。
其他区别:
- 在生产模式下简单的浏览器刷新比在开发模式下快得多。
- 生产模式下的 GWT-RPC 比开发模式下快得多。
每种组合在开发速度和便利性方面都有其自身的优点和缺点。我喜欢根据情况使用所有这些。
这篇文章有点长,但是我看到了很多关于这个话题的问题,我想把它写在一个地方。感谢阅读:-)