我一直在阅读有关GWT的一系列“最高投票”问题。这些问题中有几个是关于GWT的陷阱或问题。
你们中的大多数人是否认为GWT存在一些GWT 2.0尚未解决的问题-这会使您倾向于建议对新项目使用更简单的框架?
在某种程度上,GWT难道不应该面向未来吗(因为您不必担心GWT在各个发行版之间都会发生巨大变化,并且由于它得到了Google的支持)?
我意识到,这个问题的答案在很大程度上取决于您想做什么或想做什么。我从启动一个最终将被数百万用户使用的新Web应用程序的角度来看待这个问题。
让我们从我能想到的所有权衡开始:
搜索引擎索引的问题 -恕我直言,这应该是使用GWT或一般纯JS Web应用程序的最大缺点。由于内容,布局和所有内容都是使用JS“即时”创建的,因此搜索引擎只会看到一个非常短的HTML页面,就是这样-您必须自己来解决这一问题(例如,使用 Cloaking) 。Google终于 开始致力于解决此问题的方法,但是它对我似乎并不有吸引力。 更新: Google 终于解决了这个问题。但是,我将权衡取舍,因为与其他框架相比,使应用程序可爬网仍然需要更多的精力。至少现在我们有一个“标准”可以遵循,而不必使用一些可疑的技术(例如伪装)。
很容易(特别是对于GWT的初学者, 特别是 当这个人来自HTML / JS背景-没有太多的面向对象的经验时)很容易“哇,这些“对象”的东西太酷了,让我把所有<div>放入单独的对象中,这将使代码变得更加简洁。” 当然,我过分夸大了,但是您明白了—很容易想象,一个没有经验的程序员可以在一个单元的每个单元中放一个成熟的程序Widget,然后……浪费了大量的时间想知道为什么应用程序感觉呆滞;) TL;博士:很容易在GWT初学者写在什么文件/样本/常理线似乎代码,以使他们的应用程序“bloaty”)建议*Handlers``FlexTable *
<div>
Widget
Handlers``FlexTable
这就是我能想到的所有折衷方案-如果有人想添加一些内容,请添加注释。
现在获取优势。我将跳过一些类似的国际化,免费的跨浏览器兼容性,易于与其他Google库集成的等等,因为它们显而易见且易于掌握。我将着重于强调较少但仍然非常重要的功能:
因此它 可以 优化这样的内容:
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更可压缩。
根据您的经验和/或偏好,以下内容可能是一个优势(对我来说,但这有时是PITA;))或不是:
SuggestBox
SuggestBox.SuggestionDisplay
SuggestBox.SuggestionCallback
SuggestOracle
Suggestion
最重要的是-尝试使用GWT,您很可能会喜欢它,并且再也不想用纯JavaScript编写了;)