GWT与Flex相比如何选择?

37
我的公司正在尝试将一个使用.NET框架的应用迁移到全面基于Web、非常“ajaxy”的应用。原始的.NET应用程序是相当交互式的,就用户交互而言,大致相当于Google Maps(缩放、平移、注释矢量地图上的特征)。
我们的.NET开发人员非常喜欢Flex2。我承认我对Java有相当强的偏见。我还有大约一年的GWT经验,并且可以快速完成任务。我们的代码库主要是J2EE,因此我认为GWT是一个自然的选择。我对Flex没有任何经验,所以我真的无法对它进行推荐或反对。
我们选择框架的主要兴趣点如下:
- 具备未来性 - 在所有主要浏览器上都能工作 - 快速响应用户体验 - 代码应该可以单元测试 - 代码必须易于维护 - 开发的速度和容易程度 - 支持某种形式的矢量图形(SVG优先考虑)
您是否愿意权衡这两种技术的优缺点,甚至推荐第三个选项?

2
最终我们决定采用混合方法-使用GWT设计网站,但图形部分将由Flex组件完成。 - Limbic System
我必须说,这绝对是一个有趣的最终结果。 - Manius
对于任何晚来阅读此文的人,Silverlight已经取得了长足的进步。我不确定我们是否仍然可以认为它是Flex之后基于VM的真正RIA的第二选择 - 开发工具(包括Expression Blend)非常好,比Adobe今天提供的工具更好。唯一的缺点(如果您在控制工作站软件的企业内部网络上,则甚至不是问题)是部署数量(但这也在快速改善中)。 - Manius
12个回答

32

我对Flex只有基本的了解,但已经使用GWT工作多年。几年前我们也需要做出类似的决定(Flash vs GWT),但原因不同。最终我们看到了GWT相对于Flash的许多优势(其中许多也适用于Flex):

  • 并非所有客户都拥有Flash,Adobe提供的渗透率数据没什么用,你需要自己的数据(我们有)来查看客户实际拥有的情况。在企业和教育市场中,渗透率实际上远低于Adobe所称的高达90%以上。

  • GWT是真正跨浏览器和平台兼容的(Linux、Mac、Windows、Android、iPhone等等),而Flash永远无法做到。你可能不关心这个问题,但我们很在意。

  • Flex是专有的Adobe技术,而GWT是完全开源和可定制的。

  • GWT与DOM以及页面上的其他所有内容集成比Flash和Flex更容易。

  • GWT使用Java编写,我们都非常熟悉Java。

针对您具体的问题:

*  futureproof

没有什么是真正的未来证明,但我认为 GWT 和 Flex 都比较具备未来性。也许 GWT 稍微更具备未来性,因为它是开源的。

* works on all major browsers

GWT可以在Firefox(和所有Gecko浏览器)、Safari(和所有Webkit浏览器)、IE和Opera中使用。Flex可以在所有浏览器中工作,但仅当支持Flash时才能工作,因此我认为GWT在这方面更胜一筹。

* fast & responsive user experience

在支持的平台上,Flex 在用户体验方面将使 GWT 无法与其竞争。当涉及到流畅度和光滑度时,您无法与 Flash 相比。

* code should be unit testable

这两者都很容易进行单元测试。

* code must be maintainable

当编码良好时,两者都易于维护

* speed & ease of development
只要你熟悉它们,我会说这没什么区别。
* supports vector graphics of some sort (SVG a plus)

我不能代表Flex发言,但是GWT通过第三方库支持矢量图形SVG。


2
Flex是开源的,详见http://labs.adobe.com/wiki/index.php/Flex:Open_Source Flex支持编译时SVG:http://www.adobe.com/devnet/flex/quickstart/embedding_assets/#EmbeddingSvgFiles - Troy Gilbert
1
Flex支持矢量图形。可以使用新的开源FXG格式(http://opensource.adobe.com/wiki/display/flexsdk/FXG+1.0+Specification)、SVG或SWF。 - rlovtang
2
适用于所有主要浏览器 - 对于GWT而言,今天这不是问题,但如果IEx(或任何浏览器)出现了问题,需要更新GWT修复 - 现在你的应用程序已经损坏,直到您完成升级 GWT的痛苦过程。哎呀!GWT不太具备未来功能!开始评论“GWT确实跨浏览器和平台兼容”,暗示Flex / Flash并非如此,并没有完全诚实。唯一真正的兼容性问题是受限制的iProducts。但是否支持苹果公司反选择做法是每个人的选择... - Manius
3
是的,该死的那些iProducts和它们1亿用户的安装基础。你应该忽略它们,这样做是正确的 ;)Safari是一款主要的浏览器。任何拥有1亿用户的浏览器都是主要的浏览器。这不是Adobe的错,而是苹果对此表现得很淘气,但事实就是如此 ;) - rustyshelf
2
苹果需要意识到他们无法控制这个市场。顺便说一句,如果我们真的关心这些事情,安卓正在用自己的专有技术碾压苹果。为什么你不接受开源的Flex SDK(和部分开源的Flash播放器),它是免费提供的——只是因为它是专有的……但却支持苹果的专有、封闭系统,他们试图将其变成类似微软的半垄断?我不想直言不讳,但你的整篇文章显得非常片面。 - Manius
显示剩余2条评论

15
我对GWT不熟悉,但非常熟悉Flex。尽管GWT是基于Java的(而且听起来你们主要使用Java),但根据你列出的兴趣,我会推荐Flex:
  • 未来可靠 - Flash支持YouTube和网站上很大一部分多媒体...它已经被集成到视频游戏控制台中,并且Intel正在将其集成到机顶盒中。它将在这里存在很长时间,Adobe始终保持与Flash播放器的100%向后兼容。

  • 适用于所有主要浏览器 - 是的。而且随着Flash Player 10的推出,这也包括Linux系统。并且几乎没有管理麻烦(在我看来比Java少得多)。

  • 快速响应的用户体验 - 是的,虽然在某些情况下Java可能更快。Flash针对矢量渲染进行了优化,因此,如果这是您的目标,则它可能比Java具有更好的性能。

  • 代码应该可以进行单元测试 - 是的,请参阅FlexUnit。

  • 代码必须易于维护 - 绝对。AS3是一种严肃的语言,不是玩具脚本语言。对于C#或Java用户来说,它将非常熟悉。

  • 开发速度和易用性 - 对于你要做的事情,你将能够找到数十个完全符合你要求的示例:缩放和平移类似于Google Maps的矢量图像。其运行时核心是一个设计良好的图形引擎,因此构建交互式图形应用程序是它的天然职责。

  • 支持某种形式的矢量图形(SVG加分)- 显然,Flash可以本地支持这一点。SVG在编译阶段受支持(您可以在其中编译SVG,但不能在运行时解析SVG)。有可用的工具链,可以在运行时将SVG转换为SWF。

我唯一能想到使用GWT的原因是保持你们在服务器和客户端上都使用Java......但是再一次,你正在寻找最适合工作的技术,对吧?在这种情况下,我会说Flash(尤其是Flex框架)最适合你想要完成的任务。


1
我不知道Flex或其他RIA技术是否真正可以未雨绸缪。唯一的方法是尽可能使您的用户界面轻量化,以便在下一个伟大的功能出现时更换新技术的成本非常低。 - Scott W
2
回复:“快速响应的用户体验-是的,尽管在某些情况下Java可能更快。” GWT生成的是JavaScript,而不是Java用于浏览器。 - Petteri H
2
只是想从你的第二点开始谈起。GWT不需要在客户端安装Java。GWT的整个理念就是JavaScript是输出,因此它可以在几乎任何浏览器中工作,而不需要插件,因此没有“管理员头疼”的问题。 - Daniel Vaughan
1
Scott,Flex或任何其他基于VM的RIA技术可能不是无限期的(什么东西是?),但它们不可避免地更加未来型,因为它们受到保护,不会受到非标准浏览器环境中可能遇到的99%问题的影响。 - Manius

8

需要注意的是,目前iPhone和Android都不支持Flash。越来越多的人希望在手机上访问Web应用程序。


2
关于安卓已经过时了。对于iPhone来说,这是对乔布斯施加压力的问题,以防止他故意削弱自己的产品。最终,客户们会厌倦在iPhone上遇到“不支持”的问题,他们将不得不允许Flash。苹果的iPhone不支持Flash,尽管Adobe希望看到它在那里,并一直在开发一个版本。 “我们正在为iPhone开发Flash播放器。要在iPhone上发布软件需要获得苹果的同意。我们必须使其运行良好,并需要获得他们的同意才能发布,”Adobe首席技术官凯文·林奇说。 - Manius
2
Jobs不会“故意削弱他的产品”。Flash将永远不会在iOS(iPhone,iPad)上得到支持,而苹果已经非常明确地表达了这一点。Adobe已经放弃了尝试支持它:http://www.wired.com/gadgetlab/2010/04/adobe-flash-iphone/ 因此,如果您希望您的应用程序在iOS上运行(或更可能是由构建桌面应用程序的同一开发团队编写的移动版本),Flex不是一个好选择。或者您的开发团队在语言和编程环境之间切换,这在我看来效率相当低下,当您可以在HTML / JS / CSS上进行同质化并根据需要“浮动”开发资源时。 - Les Hazlewood
如果压力足够大(尽管可能永远不会),作业将停止,但它必须降至某个级别。如果某个网站显示“不支持 iPhone”,人们是否更有可能选择下一部 Android 手机(它具有完全相同的功能,以及大量硬件选择),还是坚定地支持苹果并且不使用基于 Flash 的他们想要使用的东西?这是任何人的猜测,但我认为时间和市场不站在苹果这场针对地球上每个其他手机制造商的小型营销战争中的一方。 - Manius
@Les - Flex可以在iOS和几乎任何其他地方上运行,使用Adobe AIR。Flex可以在Flash、AIR和Apache Flex 5上运行,很快也将支持HTML5。在平台选项类别中,Flex获胜,这甚至不用比较。 - user796820

3
我曾经参与过一个使用GWT的项目,我很喜欢它,特别是因为Java是我首选的编程语言。我没有使用过Flex,所以我只能告诉你我对GWT的体验。针对您提出的一些要求,我有以下评论:
*未来可靠性 - GWT已经存在了几年,并且一直得到Google的支持。
*适用于所有主要浏览器 - 如果您使用过GWT,跨浏览器编程将变得非常容易。GWT会为您完成这项工作!
*代码应该可以进行单元测试 - 是的,您可以对GWT进行单元测试,而且调试也很容易。
*开发速度和便捷性 - 由于GWT的存在,Ajax变得更加简单,这可以加快RIA开发的速度。
除此之外,我必须说,我非常喜欢他们的Google Group!它非常活跃,如果您在某些方面遇到困难,您可以在那里找到很多人来帮助您。

1
“适用于所有主要浏览器” - 今天这不是问题,但如果IEx(或任何浏览器)出现了问题,需要更新GWT才能解决 - 现在您的应用程序就会中断,直到您经历可能痛苦的升级GWT的过程。哎呀!GWT并不是那么具有未来性。 - Manius

2

我使用过这两种技术一段时间。

未来可期 - 我想这两种技术都将很成功,但在不同的情况下会有不同的喜好。例如,在大型(主要是企业内部)企业中,希望拥有桌面般的用户界面时,Flex 可以在任何服务器平台(jvm、.Net、php、ruby、coldfusion)上使用。另一方面,GWT 在传统的 jvm 后端应用程序中(如 tomcat+spring 等)将占主导地位。

适用于所有主流浏览器 - 这两种技术在这方面都没有问题。当安装了 Flash 插件时,Flex 绝对非常出色,无需解决任何跨浏览器兼容性问题(当然...当 Flash 应用程序运行时,浏览器是被动的:)。我记得我们在 GWT 和传统麻烦制造者 IE6 之间遇到了一些小问题,但并不可怕...

快速且响应迅速的用户体验 - 这两种技术在其类别中均处于顶尖水平。我认为 Flex 绝对是所有 RIA 解决方案中最好的(也许 silverlight、java fx 可能是唯一的竞争对手),特别是与 LCDS 集成,具有诸如数据管理、实时服务器端数据推送等酷炫功能。GWT 是 ajax 框架类别中的顶尖之一。您需要越丰富和复杂的用户界面,就越需要使用 Flex。在任何情况下,解释的 javascript 不能比编译过的 actionscript/swf 更快速和响应。

代码应该可单元测试 - 是的,它们都可以很好地进行测试。

代码必须易于维护 - 这两种技术都非常出色,维护 actionscript 可以与 java(gwt)相媲美,特别是如果您使用一个好的 IDE,例如 Flex Builder。

开发速度和便捷性 - 如果您了解自己的工作,这两者都是完美的。一切都取决于您的背景。对于典型的 Java 开发人员来说,学习 Flex 的曲线可能会稍微困难一些(您需要学习一个新的编译器/运行时环境,可能还需要学习新的 IDE 或至少是新的 Eclipse IDE 插件:)。一些 Flash 知识是加分项,但不是必需的,通常只用于特定任务,如构建自己的组件等。

支持某种矢量图形(SVG 加分) - 我记得没有问题,我没有太多的经验,但当 FXG 完成时,我会关注它。

开发和部署成本 - 获胜者在这里是明确的。GWT。Flex 的开发是为了盈利。虽然自己是开源的,但最好的工具(Flex Builder、新的 Flash Builder/Catalyst)和框架(LCDS)都是商业化的,而且价格不菲。看看 LCDS 每 CPU 价格表,您就知道我在说什么了。对于 GWT,大多数优质工具/框架都是开源或至少是免费的。除了一些高级组件,如 ext gwt 和 smartgwt EE。显然,您可以没有它们而生存。


1
适用于所有主要浏览器 - 如今这不是问题,但如果IEx(或任何浏览器)出现问题需要更新GWT才能解决 - 现在你的应用程序就瘫痪了,直到你经过可能痛苦的升级GWT的过程。噢!GWT并不是那么具有未来性。开发与部署成本 - 不要太快-大多数人不使用LCDS,他们使用类似GraniteDS或BlazeDS的OSS。而且与雇佣开发人员相比,Flex / Flash Builder非常便宜 - 几百美元的IDE什么都不算!一旦你获得了IDE,从那时起,一切都是免费的。 - Manius

2

我对Flex持有偏见,因为我自2000年以来一直从事Flash/Flex开发。但我认为回答你的问题,实际上它真正取决于你想要实现的交互和复杂程度。

Flex会让你做一些在JavaScript环境(ASP.NET AJAX、jQuery、GWT)中几乎不可能实现的事情,比如简单的3D图形。在Flex中构建复杂的交互非常容易。此外,它非常快速,并且可以同时处理大量动画对象。Flex可以通过Web服务与.NET或Java无缝通信。使用Flex的缺点是,它感觉像嵌入式应用程序而不是紧密集成的东西。

如果你要坚持JavaScript方法,通常我建议使用类似jQuery这样的语言不可知的东西。但由于你已经有了GWT的经验,这可能适合你的项目。缺点是,最终GWT仍然是JavaScript,因此您将受到浏览器中可能实现的速度和交互性的限制。


GWT通过http://code.google.com/p/gwt-o3d/提供了3D图形支持。 - kirushik

2
最近Sun推出了一项名为JavaFX的新技术,用于这类RIA应用。您可以查看一下(javafx.com)。它应该能在Java 5或更高版本上运行,但肯定不会像Flash那样普及。然而,考虑到您对测试的要求,我认为此时此刻可能不适合使用这项技术。
另外,我认为Troy Gilbert在他的帖子中犯了一个错误。具体来说,他似乎表明GWT应用程序将在Java中运行(由客户端)。我几乎可以确定,GWT应用程序首先是用Java编写的,然后GWT将其编译成客户端运行的javascript库。

1
你对 GWT 的理解是正确的。 - cletus
1
这是正确的,当然这意味着 GWT 遭受了和其他普通所谓的“AJAX框架”一样的问题 - 浏览器“平台”依赖和暴露给非常动态、非标准的开发环境。Flex 应用程序在 Flash 虚拟机中运行,这让你免受在半打不同浏览器上运行时遇到的99%问题。 - Manius

1

这确实是一个苹果/橙子的问题。使用GWT,您可以获得用Java编写所有内容的纯净性。具有讽刺意味的是,最终结果永远不会感觉像其他任何网站。

使用Flex,您可以编写感觉像应用程序的东西。而且,也许最重要的是,使用Flex,无论是功能还是图形,没有任何您无法通过编程完成的事情。

如果您正在为特定用户群体开发应用程序,则Flex是明显的赢家。如果您正在构建基于大众社交网络的任何内容,则GWT绝对是更好的选择。


@Nail Visnapuu:GMail感觉就像一个网站而已?我们可能访问的不是同一个网站 ;) - SyntaxT3rr0r
1
实际上并不是这样。只有一些花哨的AJAX脚本和一堆JavaScript使它运行得有点慢(这其实是你期望一个网站的表现)。这个答案有很大的真实性。在我看来,Gmail并不像JavaScript的倡导者总是吹嘘的那么令人印象深刻。99%的时间,你只是在那里查看一些邮件,也许回复一两封邮件,然后离开。没有任何一个基本的“非AJAX”网站无法完美处理的事情。 - Manius

1

未来的保障更多地与架构有关,而不是特定技术。通过正确的架构,您可以相当容易地替换演示技术。我喜欢Silverlight/MVVM,尽管该模式需要一些规划才能支持HTML5。


0

虽然iPhone和Android尚不支持Flash,但您也应该注意到谷歌正在为移动手机创建应用程序。他们这样做是因为移动设备的屏幕远比典型的笔记本电脑/台式机小得多。因此,缺乏Flash支持并不是一个问题,因为定向的应用程序提供更好的用户体验。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接