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

End*_*ies 5 browser performance gwt tweak

我有一台能够运行64位Windows 7的不错的机器.那么为什么我会在"开发模式"中停止一个小样本GWT应用程序,编辑它并重新启动它需要30秒才能在浏览器中响应,最近都是Firefox和最新的Chrome?

对于现在的GWT开发人员来说,这种基于糖蜜的编辑 - 编译周期是否正常?

对于更现实的应用程序来说会变得更糟吗?或者整个30秒只是框架开销,而我自己的代码不会让它比任何时候都更加臃肿?

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

谷歌人有比我更快的机器,这不是一个痛苦或他们像我们其他人一样受苦吗?

Chr*_*her 12

在开发过程中,GWT应用程序可以以不同的模式运行,并且通常会有一些关于什么时候需要的混淆

  • 重新启动服务器,
  • 重新加载服务器,
  • 刷新浏览器,
  • 或者只需单击网页中的某个位置即可.

让我们退一步看一下开发模式/生产模式与另一方面"With Debugger"/"Without Debugger"之间的所有差异.当然,每个使用GWT的人都已经听说过......

模式

发展模式

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

开发模式的主要优点是,它不需要您首先将代码编译为JavaScript - 它在客户端以代码服务器中的Java字节码运行.这基本上是一个JavaScript仿真 - 但它非常接近,大多数人都不会注意到它们之间的区别(有些人甚至认为,GWT在开发模式下将Java编译为JavaScript,但情况并非如此.)

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

生产模式

将客户端作为编译的JavaScript运行.在使用它之前,您必须首先使用GWT Java to JavaScript编译器(通常称为gwtc" 工具包http://code.google.com/webtoolkit/doc/latest/tutorial/images/GWTCompileProject") .png图标")

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

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

发射

"没有调试器"

您可以在不附加调试器的情况下运行应用程序(在开发和生产模式下都可以).如果使用Eclipse,请使用"Run As ...".

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

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

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

开发视图重新加载图标

"使用调试器"

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

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

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

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

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

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


所以你基本上有四种组合

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

其他差异:

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

每种组合都有其自身的优点和缺点,可以提高开发速度和便利性.我喜欢使用所有这些,具体取决于具体情况.


这篇文章已经变得有点长了,但我已经看到很多关于这个主题的问题,我想把它写在一个地方.谢谢阅读 :-)


Joh*_*sch 6

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

假设你在浏览器中托管它(它听起来像你),那么大多数变化在你完成它们之后几乎是"热门".我昨天花了一些时间对模块中的主代码文件进行各种更改,而不必为任何一个重启服务器.

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