在开发过程中,一个 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 比开发模式下要快得多。
每种组合在开发速度和便利性方面都有其自身的优点和缺点。我喜欢使用所有这些,视情况而定。
这篇文章有点长,但是我看到了很多关于这个话题的问题,我想把它写在一个地方。谢谢阅读 :-)