Java 为什么是GWT?使用此RIA框架的优势和权衡

Java 为什么是GWT?使用此RIA框架的优势和权衡,java,javascript,ajax,gwt,Java,Javascript,Ajax,Gwt,我一直在阅读GWT的一系列“投票率最高”的问题。其中几个问题涉及GWT的陷阱或问题 在文章中:而且,一些海报似乎暗示GWT不够轻,或者有更好的替代品可以使用 你们中的大多数人是否觉得GWT2.0还没有解决GWT的一些问题——这会使你们倾向于建议对一个新项目使用一个更简单的框架 从某种程度上说,GWT不应该是未来的证明吗(因为你不必担心它在不同版本之间发生巨大的变化,而且它有谷歌的支持) 我意识到这个问题的答案在很大程度上取决于你想做什么或想做什么。我从启动一个最终将被数百万用户使用的新web应用

我一直在阅读GWT的一系列“投票率最高”的问题。其中几个问题涉及GWT的陷阱或问题

在文章中:而且,一些海报似乎暗示GWT不够轻,或者有更好的替代品可以使用

你们中的大多数人是否觉得GWT2.0还没有解决GWT的一些问题——这会使你们倾向于建议对一个新项目使用一个更简单的框架

从某种程度上说,GWT不应该是未来的证明吗(因为你不必担心它在不同版本之间发生巨大的变化,而且它有谷歌的支持)


我意识到这个问题的答案在很大程度上取决于你想做什么或想做什么。我从启动一个最终将被数百万用户使用的新web应用程序的角度来看这一点。

我们有一个GWT应用程序,其中包含一系列Selenium验收测试。我(和你一样)认为将GWT从1.7升级到2.0肯定是安全的。而且是——大部分是。该应用程序对“人类”用户仍然有效,但selenium测试都失败了。有一个新版本的Selenium正在准备中(在alpha发布时,有许多不支持的操作),但是如果我们想继续使用GWT2,似乎我们必须放弃一些可测试性。所以要小心“未来证明”的假设

在比较YUI和ZK之后,我们在几个月前做出了使用GWT的决定。我还是很高兴我们选择了GWT。GWT网站上的支持级别和文档的总体质量似乎非常高

GWT进行模块拆分并提供性能分析,这有助于反驳认为它不够轻量级的论点。

权衡 让我们从我能想到的所有权衡开始:

  • 您使用的是Java-这意味着您的webdevs对javascript的熟练程度将不会有多大用处(如果您涉足JSNI,这将很有帮助)
  • 搜索引擎索引问题-嗯,这应该是 使用GWT的最大缺点,或 一般来说,纯JS web应用程序。 因为内容,布局,一切 是用JS“动态”创建的 搜索引擎只会看到一个非常 简短的HTML页面,就是这样-你 我得设法解决这个问题 你自己(例如,使用 ).谷歌终于 然而,它似乎没有 对我很有吸引力。
    更新:谷歌有这个问题。然而,我将把这作为一种折衷,因为使应用程序可crawable仍然需要比在其他框架中付出更多的努力。至少现在我们有了一个“标准”可以遵循,不必使用一些可疑的技术(比如)
  • “哇,这些‘对象’的东西太酷了,让我把我所有的
    都变成单独的对象吧,这会让代码变得漂亮整洁。”这很容易(特别是对于GWT的初学者,尤其是那些来自HTML/JS背景的人——没有太多面向对象的经验)。当然,我有点夸张了,但你明白了——很容易想象,一个没有经验的程序员可以在FlexTable的每个单元格中放置一个完整的
    小部件
    ,其中包含大量
    处理程序
    。。。然后,他会浪费很多时间想知道为什么应用程序感觉迟钝;)tl;dr:GWT的初学者很容易通过编写与文档/示例/常识相符的代码使他们的应用程序“膨胀”;)建议
这就是我能想到的所有权衡——如果有人想添加内容,请添加评论

优势 现在谈谈优势。我将跳过一些,比如免费的,与其他谷歌的库的简单集成,等等,因为它们有点明显,容易理解。我将试着把重点放在强调较少但仍然非常重要的功能上:

  • 编译器-现在,我与之交谈的大多数关于GWT的人都不这么认为 认识到这一部分是多么令人惊奇 GWT是——首先尝试一下。编译器具有以下视图: 整个应用程序
因此,它可以优化这样一个系统:

public class ShapeExample implements EntryPoint {
  private static final double SIDE_LEN_SMALL = 2;
  private final Shape shape = new SmallSquare();
  public static abstract class Shape {
    public abstract double getArea();
  }
  public static abstract class Square extends Shape {
    public double getArea() { return getSideLength() * getSideLength(); }
    public abstract double getSideLength();
  }
  public static class SmallSquare extends Square {
    public double getSideLength() { return SIDE_LEN_SMALL; }
  }
  public void onModuleLoad() {
    Shape shape = getShape();
    Window.alert("Area is " + shape.getArea());
  }
  private Shape getShape() { return shape; }
}
……为此:

public class ShapeExample implements EntryPoint {
  public void onModuleLoad() {
    Window.alert("Area is 4.0");
  }
}
然后将其混淆并最小化。此外,这样做可以使生成的文件通过gzip更可压缩

  • 您正在使用Java——不管您是否喜欢Java,这是无可否认的 这是一个非常好的面向对象的 语言,允许编写易于维护和测试的代码 (我认为这是不可能的 到了这样的程度(使用JavaScript)。如果 你跟着一些, 您将得到一个 不仅对你是可以理解的,而且 对于其他开发人员也是如此。另一个 值得一提的是 那些漂亮的设计模式等等 在“纯”Java中工作,也在这里工作
  • GWT的一个妙处是你 获得性能增益和新功能 免费提供的功能,几乎所有 框架的新版本。自从 它是Java编译成JavaScript的,是吗 只需重新编译即可获益 通过在 新编译器或获取新功能(如GWT1.5中引入的)
  • 调试-值得一提的是,您可以(而且应该:)像调试任何其他Java应用程序一样,使用IDE的调试器调试GWT应用程序。一般来说,我看到的Java调试器比JavaScript调试器更高级
  • UiBinder-虽然它还不是“完美的”,但让我们使用XML以一种简单直观的方式设计您的小部件(而不是2.0之前强迫您使用Java进行设计的方式)。混合HTML和GWT的小部件从未如此简单有趣;)
  • 使用CSS-当然,GWT一直接受CSS,但随着GWT2.0(和UiBinder)的推出,他们将其提升到了另一个层次。