【问题标题】:if basic, sample GWT app takes 30sec to load in browser, is that normal? will real apps take 2 mins?如果基本,示例 GWT 应用程序需要 30 秒才能在浏览器中加载,这正常吗?真正的应用程序需要 2 分钟吗?
【发布时间】:2011-09-02 14:38:43
【问题描述】:

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

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

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

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

Google 员工是否拥有比我快得多的机器,而且这不那么痛苦,还是他们和我们其他人一样受苦?

【问题讨论】:

    标签: gwt browser performance tweak


    【解决方案1】:

    在开发过程中,一个 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 比开发模式下快得多。

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


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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢,这是有道理的。那么在哪些情况下我们实际上需要重启服务器呢?你去喝咖啡时是随机做的还是有一些规则“当你做X,Y或Z时,重新启动服务器”?
      • 您需要在代码结构发生变化时重新启动它——如果您更改导入、定义函数或创建新类。如果你使用 eclipse,它会告诉你什么时候需要重启。
      • @Riley,我不确定我是否理解你的意思。我已经进行了各种代码更改,并且从未需要或被提示重新启动。我发现我确实需要重新启动的唯一情况是服务器端更改。
      • @Riley / @maneesh:仅当您附加调试器时才会发生这种情况(在 Eclipse 中:“Debug As...”)有时,这是最有效的方法,因为您会立即获得更改 -但如果调试器达到其限制,您必须重新启动服务器。通常,使用“运行方式...”更有效,在这种情况下,您必须刷新浏览器以进行客户端更改,但您基本上不必再次重新启动服务器。 (当然,对于服务器端代码更改,您只需使用开发视图中的黄色小重新加载图标。)
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-10-13
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-14
        相关资源
        最近更新 更多