Silverlight与Flex的比较

70

我的公司开发了几种类型的应用程序。 我们很多业务都来自于制作多媒体应用程序,通常使用Flash完成。 但是,现在这方面的业务正在开始向Flex开发迁移。

我们大部分的其他开发工作都是使用.NET完成的。 我正试图推动使用Silverlight开发,因为它将更好地利用员工中的.NET开发人员。 相比Flex平台,我更喜欢Silverlight平台的一个简单事实是Silverlight完全由.NET代码构成。 我们拥有比Flash/Flex开发人员更多的.NET开发人员,而且我们大多数的Flash/Flex开发人员都是图形艺术家(不是真正的程序员)。他们只是因为它似乎是从Flash逻辑上的下一步巩固,才会倾向于现在选择Flex。

我已经使用过两者进行开发,我真诚地相信Silverlight更易于使用。 但我想说服那些只是Flash开发人员的人。

所以这是我的问题:如果我要参加一次表扬Silverlight的会议,公司为什么要选择Silverlight而不是Flex? 除"并非所有人都有Silverlight"之外,每个平台的优缺点是什么?

22个回答

52

我认为你应该将Silverlight视为一项长期计划,就像微软似乎正在做的那样。当你关注覆盖率和安装基础时,使用Silverlight与Flash之间有一个明显的平衡,但以下是Silverlight成为好的前进方向的一些原因:

  1. 后发优势 - 就像微软通过.NET构建了一个“更好的Java”一样,他们能够从今天开始从零设计RIA插件,并且知道人们如何使用网络,这是Flash的发明者无法准确猜测的。Flash可以添加功能,但不能真正地抛弃平台并重新开始。

  2. 开发人员的熟悉度 - 虽然Silverlight是一种新模型,但对于开发人员来说并不完全陌生。他们会比理解启动具有新脚本语言和新事件范例的新开发环境更快地理解Silverlight的工作方式。

  3. 摆脱Flash中时间轴模型 - Flash最初是为基于关键帧的动画而构建的,虽然有方法将其抽象化,但它是Flash工作的核心。Silverlight放弃了此模型,采用了面向应用程序的模型。

  4. ScottGu - ScottGu对Silverlight充满热情。没什么好说的。

  5. 酷炫的新功能 - 虽然Silverlight在某些明显的功能方面(如网络摄像头/麦克风集成或3D /图形加速)仍有一些赶超Flash的工作要做,但内置了一些流畅的新技术 - 深度缩放就是一个例子。我看到在Silverlight方面有更多“革命性”的技术,而Flash似乎在维护模式下运行。


18
如果你仅仅使用Flex工作,那么你可能完全不知道时间轴的存在。这是一个无关紧要的问题。 - analytik
11
  1. 更好的Java,但不是跨平台的(Mono很出色),Adobe放弃了播放器并重新开始使用AVM2和AS3。
  2. 同意。
  3. 时间轴现在是可选的了(使用sprite代替movieclip)。
  4. Flash绝对没有3D加速,所以这是一种平局。深度缩放很酷但毫无意义。
- Iain
44
实际上,Jon,在表示尊重的前提下,你正在将Silverlight与Flash进行比较,而不是Flex,这是Silverlight支持者常见的混淆点。我已经用Flex编写了一个企业级应用程序(编译为SWF),但连编写Flash应用程序的起点都不知道。 - SkunkSpinner
10
Flash与Flex非常不同,(实际上Flex中也有帧率和这些东西,但它们没有被使用,这是一种不好的做法)。Flex也比Flash快得多。我建议您查看使用Flex构建的C++解释器。Silverlight播放器并不那么常见。 - Mark
1
@ilk - 我在2009年12月开始在微软工作。我在2008年8月发布了这个答案。我选择来微软工作是因为我喜欢他们的开发者产品,而不是相反。就这些。 - Jon Galloway
显示剩余2条评论

30

这里有两个问题:Silverlight与Flash作为平台的比较和Silverlight与Flex作为RIA框架的比较。

第一个问题取决于您的时间范围。Flash Player的覆盖率超过95%,而Silverlight远远无法达到这一水平。然而,Silverlight可能会获得更高的覆盖率,毕竟它由Microsoft支持。如果您计划在下周推出一个网站,并且希望拥有大量的受众,那么Silverlight不是一个选择。但是,如果您要推出一个非常酷的应用程序,并且每个人都想使用它,那么情况就有所不同了。如果您的应用程序足够好,您的目标受众可能会安装Silverlight以便能够运行它。

至于第二个问题,这涉及到在Silverlight中开发应用程序的易用性。Flex不仅仅是一组小部件,它是一个非常庞大的框架,可以简化开发者的工作。您可以使用核心Flash API编写相同的应用程序,但这将需要更多的工作量。取决于Silverlight中提供了哪些功能,在决定时考虑到这一点非常重要。如果您可以缩短开发时间,那么是否值得拥有两个平台呢?


22

我认为Silverlight最适合那些拥有.NET开发人员但没有设计经验的公司。

就技能需求而言,相对于寻找ActionScript专家,寻找C#或VB开发人员会更容易找到。然而,这种选择存在权衡:

设计经验不仅需要具备艺术技能的设计师,还需要Adobe提供的知识和工具进行投资。你几乎可以保证一个专业的设计师使用Mac并且具有Adobe工具的经验。

现在,Silverlight的设计工具质量还不够好,可能会带来麻烦。例如,Blend无法呈现包含IValueConverter的任何xaml时会出错,这是个问题。我不知道Adobe开发者的经验会怎样,但我确信它也会面临类似的问题。

因此,在当前阶段,问题归结为人力资源:

如果你有.NET经验但很少涉及设计技巧,那么选择Silverlight。编程技能/工具是可转移的。 如果你有设计经验和技能,那么选择Flex。设计师技能/工具是可转移的。

无论哪种客户端平台,都需要与服务通信以获取数据,因此您始终会利用后端的现有编程专业知识。

从不同的角度,对Jon的观点进行了改述:

我认为你应该把目光投向长期发展,就像Adobe似乎正在做的那样。当你关注覆盖率和安装基数时,使用Silverlight与Flex之间存在明显的平衡,但以下是更多选择Flex的好处:

  1. 第二波优势 - 就像Adobe使用Flash构建了“更好的Java小程序”一样,他们能够从现在开始重新设计运行时。他们知道人们如何使用网络,这是现有客户端平台的发明者永远无法准确猜测到的。.NET可以添加功能,但不能真正放弃该平台并重新开始。

  2. 设计师熟悉度 - 尽管Flex/AIR是一种新的编程模型,它仍然依靠Adobe Creative Suite等已经非常熟悉的工具。 这意味着更容易找到设计师来提高产品质量。

  3. 跨平台支持 - Flex支持Windows,Mac和Linux,以及移动设备(iOS,Android),而Silverlight当前只支持Windows和Mac,未来可能会更少。

总结:Silverlight适合那些具备.NET技术但缺乏设计经验的公司。如果你希望选择长期发展,更好的选择是Flex。

对于设计师来说,这种方式不完全陌生。他们将比启动新的设计环境、使用功能欠佳的新工具和新动画范例更快地理解 Flex 的工作方式。

  • 在 Silverlight 中摒弃 RGB 颜色模型——.NET 最初是为 Windows 构建的,并且它是其工作原理的核心。Flex 已经很久以前就放弃了这个模型,转而采用以设计为中心的模型。

  • 你所有的工具都在你的 Mac 上运行。没什么好说的。

  • 酷炫的功能——Silverlight 在某些明显的功能上仍然需要赶上 Flash(如网络摄像头/麦克风集成,或 3D/图形加速)。


  • 去看看 QuakeLight 的视频,告诉我 Silverlight 在图形方面还有些赶不上的地方。另外:“你所有的工具都可以在你的 Mac 上运行。就这样。”显然,Mac 是完美的。 - jcollum
    5
    根据我的经验,开发人员比设计师更容易学习新的编程语言。设计师学习新的设计软件需要更多的时间和精力。他们甚至比我们更加固执己见! - Iain
    @jcollum:实际上,Quake也被移植到了Flash(http://www.youtube.com/watch?v=6TKGNS1N1yo),使用Alchemy(http://labs.adobe.com/technologies/alchemy/)。 - Hrundik
    1
    “设计技能”与编写适当的Flex应用程序有什么关系?它完全可以制作出看起来像开发人员“设计”的股票应用程序。 - Joel Hooks
    2
    你几乎可以保证专业的设计师使用Mac并具有Adobe工具的经验。如果您曾经使用过Flex Builder,您会知道,“具有Adobe工具的先前经验”并不是一个优势。它是基于Eclipse构建的,对于没有先前编程IDE熟悉度的人来说可能会感到陌生。 - jamisonLikeCode

    15
    我们同时使用Silverlight和Flex,以下是开发人员对两者的看法。
    Silverlight的优点:
    1. C#语言的强大功能、代码片段重用现有的C#算法实现。 2. 其他语言的强大功能,如泛型和Linq等。 3. CLR本地执行的强大能力,而不是Flash的ActionScript解释器。 4. 一个集成的Visual Studio用于所有开发。 5. Expression Blend非常酷,比Flex Builder更高级的编辑器。 6. XAML对搜索引擎友好。 7. 非常漂亮的状态转换,很容易定义它们。 8. 线程和异步任务。 9. 辅助功能,没有人知道微软在所有产品上都提供最佳的辅助功能,它们总是在残疾人群体中表现良好。与浏览器相比,只有IE支持完整的辅助功能,Safari/Firefox等远远落后。
    Silverlight的缺点:
    1. 严格的Microsoft平台限制。我知道很多人会争辩,但在当前情况下,半数Intel Mac用户无法将Silverlight 3.0运行起来,所有PPC Mac用户都不能使用Silverlight 2.0及以上版本,而Linux也没有Silverlight。 2. 有Mono,但未得到Microsoft的官方支持,它总是落后于反向工程的.NET,并将其移植到其他平台上,它还没有开箱即用。 3. 大多数组件/控件都是"封闭的",因此很难扩展它们并覆盖以轻松创建新组件。 4. 坏的CustomControl/UserControl体系结构。例如,您无法将XAML的根设置为ComboBox或任何其他控件,并让它既有设计又有代码,您可以创建自定义控件,但它们过于复杂。 5. 绑定需要组件命名,不支持像Flex那样的实例表达式,虽然Silverlight的双向绑定很好,但您必须为一个数学表达式编写长的代码进行多个绑定。
    e.g.
    // this is possible in flex..
    // but not in silverlight
    <mx:TextBox id="firstName"/>
    <mx:TextBox id="lastName"/>
    
    // display full name..
    <mx:Label text="{firstName.text} {lastName.text}"/>
    

    Flex的优点:

    1. 真正的跨平台,支持各种硬件和操作系统,在任何地方都能很好地工作。
    2. 开源使其易于理解和扩展功能。
    3. 每个控件/组件均可扩展,并且更改默认行为的限制较少。
    4. 创建新组件最简单的方法,您可以让mxml派生自任何控件并通过广泛的绑定进行扩展。
    5. Flex包含大量控件,您不需要任何第三方库。

    Flex的缺点:

    1. 对于迭代执行速度较慢,没有线程!没有异步任务!
    2. 基于第一点,不可能有出色的动画或图形。
    3. 没有泛型,没有其他语言,没有Linq。
    4. Number类存在漏洞,不能存储完整的64位长值。
    5. Eclipse不适用于设计出色的UI界面。

    结论:

    1. 我们使用Flex处理数据应用程序,例如简单的表单处理应用程序。
    2. Silverlight用于极其丰富的图形和动画。

    1
    只是一点提示:您可以通过www.actionlinq.org在Flex中使用Linq :) - Brian Genisio

    13

    Silverlight的问题在于仍有很多人没有安装它。此外,如果您的现有.Net开发人员只熟悉传统的服务器端.Net编码,那么他们能否充分利用其现有技能还存在疑问。

    您推动Silverlight而非Flex的原因是什么?如果您不得不向SOFlow社区寻求理由,那么您如此愿意推动它似乎有些奇怪。


    2
    只要等待 Microsoft 推送它到自动更新中,就可以实现99%的普及率。 - Andrei Rînea
    7
    当然可以。确切地说,99%的IE用户使用IE7,没有人使用IE6,因为IE7是通过自动更新推送的。是的。 - analytik
    4
    你忘记了Flash已经随大多数浏览器捆绑了。 - Slapout
    3
    我最近安装 FF3 后需要单独安装 Flash。而 Silverlight 的安装更容易些。 - jcollum
    @Christian - 更新一下,Flash现在已经打包进Chrome的开发通道中了。 - Nick Craver
    显示剩余4条评论

    11
    另一个Flex开发的优点是可以使用相同的源代码(和相同的IDE)切换到桌面应用程序(Adobe AIR)的开发,并从Web进行分发。您可以查看这里了解Flash平台的未来。
    2011年第三季度更新:Flash 11支持低级别3D加速,并且已经有许多框架和主要引擎(Unreal Engine 3、Unity)支持它。然而,未来的卖点是AIR应用将在Windows、Mac、Android、Playbook和iOS平台上运行(Linux支持已被删除)。至少当您拥有Adobe CS5.5+时,在这些平台之间移植最小化麻烦。

    2015年第二季度更新:Silverlight已正式死亡。Adobe AIR仍然存在,但并不是很兴旺 - 它可能基于您的技能和工具链是有用的。微软和Adobe都承认HTML5是未来的趋势(不管是使用AIR还是Apache Cordova或Visual Studio)。

    2017年第三季度更新:哈哈,现在谁还使用Flash呢?


    2
    同时,Flash Player 10还具备硬件加速的3D功能——可惜只是个说法! - Iain
    2
    同意使用AIR(可能非常重要),但目前还没有3D支持。 - Hrundik
    我们还需要注意到,Air在2008年初发布,它非常年轻,当然随着时间的推移它会变得更好。我不能给出“无立场观点”,因为我不喜欢微软的商业/营销方法。但如果没有它们,我们现在的技术状态就不会是这样。 - Fábio Antunes
    Flex有Air,而Silverlight有WPF。我认为两者之间的差异不足以成为正反双方争论的论点。 - Keith
    Silverlight 3带有“离线浏览”功能,您的Silverlight应用程序可以像AIR应用程序一样安装到桌面上。有API可用于检测应用程序是否在浏览器中运行,是否存在Internet连接,甚至还有一个API可用于自动更新应用程序。 - Jason Miesionczek

    7

    不要忘记:

    Flex非常跨平台,因为它使用Java编译器编译,这意味着在开发Flex应用程序时可以轻松使用Mac或Linux。我目前的cruisecontrol设置(使用Linux)可以构建Flex应用程序,但开发人员同时使用Mac、Linux和Windows。

    据我的经验,Java开发人员在Flex Builder中感到非常舒适,因为它基于Eclipse。


    3
    C#开发者对Flex也有好感,因为Flex的首席设计师最初就在.Net团队中。 - Mark
    1
    你也可以使用带有Flex开发插件的Eclipse,它与Adobe Flex相同。 - Fábio Antunes

    7

    我建议让你的开发人员尝试这两个平台,看看他们喜欢哪一个。

    回答以下评论时,我注意到虽然有很多答案推荐Flash/Flex,但Silverlight却获得了更多的投票。这不是说谎,而是偏爱自己熟悉的,不一定是最好的平台。


    1
    我看到更多的人喜欢Flex而不是Silverlight,SO可能更多由.Net人士主导,但它肯定不带偏见。 - Mark
    2
    那么微软的开发人员自动就不诚实了吗?每个不同意您的人都是说谎者吗? - Joel Mueller

    6

    在一天的结束时,你的开发人员不应该支配你的技术。这绝对是一个基于用户的产品决策。

    如果你要部署到消费互联网,Flash播放器或AJAX是最好的选择。如果你要部署到.net企业的私有局域网,你有多种选择。


    6
    银光程序员在组件模型和事件触发能力上无法与Flex相比,使用XNA和C#,我的一个朋友必须通过各种方式才能使他的银光应用程序正常工作。然后,它必须交给设计师使其看起来漂亮一些。听听deepfriedbytes.com关于Silverlight的播客,你会听到即使是那些真正推崇Silverlight的人也认识到其中的一些问题。他们同意,在当前状态下,Silverlight还不够成熟,尚不能用于任何大型应用程序。如果你已经熟悉Flash和ActionScript 3.0,我会选择Flex,采用简单明了的方法。在我看来,Flex更有意义。

    1
    XNA和Silverlight有什么关系?它们并没有像你所暗示的那样直接联系。99%的程序员在发布之前确实应该将他们的东西交给设计师处理 :) - jcollum

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