我的公司开发了几种类型的应用程序。我们的很多业务都来自于制作多媒体类型的应用程序,通常是在 Flash 中完成的。然而,现在房子的那一侧开始转向进行 Flex 开发。
我们的大部分其他开发都是使用 .NET 完成的。我正试图推动进行 Silverlight 开发,因为它会更好地利用员工中的 .NET 开发人员。我更喜欢 Silverlight 平台而不是 Flex 平台,因为 Silverlight 都是 .NET 代码这一简单事实。我们的 .NET 开发人员比 Flash/Flex 开发人员多,而且我们的大多数 Flash/Flex 开发人员都是图形艺术家(不是真正的程序员)。他们现在推向 Flex 的唯一原因是因为这似乎是 Flash 的合乎逻辑的一步。
我已经使用这两种方法进行了开发,并且老实说,我相信 Silverlight 更易于使用。但我试图说服那些只是 Flash 开发人员的人。
所以我的问题是:如果我要参加一个赞扬 Silverlight 的会议,为什么公司要选择 Silverlight 而不是 Flex?除了明显的“不是每个人都有 Silverlight”之外,每个人的优点和缺点是什么?
我认为您应该将 Silverlight 视为一项长期计划,就像微软似乎正在做的那样。当您担心覆盖范围和安装基础时,何时使用 Silverlight 与 Flash 有一个明显的平衡,但以下是 Silverlight 是一个很好的前进方向的一些原因:
后发优势——正如微软使用 .NET 构建了“更好的 Java”一样,他们今天能够了解您如何从头开始设计 RIA 插件。他们的优势在于了解当今人们如何使用网络,这是 Flash 的发明者永远无法准确猜到的。 Flash 可以添加功能,但它们不能真正放弃平台并重新开始。开发人员熟悉度 - 虽然 Silverlight 是一种新模型,但开发人员并不完全陌生。他们将“获得” Silverlight 的工作方式,比他们理解使用新脚本语言和新事件范例启动新开发环境的速度要快得多。摆脱 Flash 中的时间线模型 - Flash 最初是为基于关键帧的动画而构建的,虽然有一些方法可以将其抽象出来,但它是 Flash 工作方式的核心。 Silverlight 放弃了以应用程序为中心的模型。 ScottGu - ScottGu 对 Silverlight 很感兴趣。纳夫说。很酷的新功能 - 虽然 Silverlight 在一些明显的功能(如网络摄像头/麦克风集成,或 3d/图形加速)上仍有一些赶超 Flash 的能力,但 Silverlight 中内置了一些巧妙的新技术 - Deep Zoom 就是一个例子。我在 Silverlight 方面看到了更多“革命性”技术,而 Flash 目前似乎处于维护模式。
这里有两个问题:作为平台的 Silverlight 与 Flash 以及作为 RIA 框架的 Silverlight 与 Flex。
第一个问题取决于您的时间范围。 Flash Player 有超过 95% 的覆盖率,Silverlight 没有办法接近。不过,Silverlight 可能会成功,毕竟它有微软的支持。如果您打算在下周推出一个网站并希望拥有大量受众,Silverlight 不是一个选择。如果您的目标是启动一个每个人都想使用的非常酷的应用程序,那就有点不同了,如果您的应用程序足够好,您的目标受众可能会安装 Silverlight 以便能够运行它。
至于第二个问题,那就是在 Silverlight 中开发应用程序有多容易。 Flex 不仅仅是一组小部件,它是一个非常大的框架,可以做很多事情来简化开发人员的工作。您可以仅使用核心 Flash API 编写相同的应用程序,但工作量要大得多。根据 Silverlight 中的可用功能,这应该是决定时的一个重要因素。如果可以缩短开发时间,那么拥有两个平台值得吗?
我认为 Silverlight 对于拥有 .NET 开发人员但没有设计经验的公司最有利。
就寻找 C# 或 VB 开发人员与寻找 ActionScript 大师而言,技能组合将更容易找到。但是有一个权衡:
设计经验不仅是对具有艺术技能的设计师的投资,也是对 Adobe 提供的知识和工具的投资。您几乎可以保证专业设计师使用 Mac 并具有使用 Adobe 工具的经验。
现在,Silverlight 设计器工具还没有完成,可能会让人头疼。例如,尝试呈现包含 IValueConverter 的任何 xaml 时出现混合错误,这是有问题的。我不知道 Adobe 开发人员的体验是什么,我敢肯定它很棘手。
所以在游戏的这个阶段,它归结为人力资源:
如果您有 .NET 经验并且对设计技能投入很少,请选择 Silverlight。编程技能/工具将是可转让的。如果您有设计经验和技能,请选择 Flex。设计师的技能/工具将是可转移的。
无论哪种方式,两个客户端平台都需要与服务通信以获取数据,因此您将始终在后端利用现有的编程专业知识。
从不同的角度转述Jon's意见:
我认为您应该将 Flex 视为一项长期游戏,就像 Adobe 似乎正在做的那样。当您担心覆盖面和安装基础时,何时使用 Silverlight 与 Flex 有一个明显的平衡,但这里有更多原因 Flex 是一个很好的方向:
后发优势 - 正如 Adobe 使用 Flash 构建了一个“更好的 Java Applet”一样,他们今天能够了解您如何从头开始设计运行时。他们的优势在于了解当今人们如何使用网络,这是现有客户端平台的发明者永远无法准确猜到的。 .NET 可以添加功能,但它们不能真正放弃平台并重新开始。设计师熟悉度——虽然 Flex/AIR 是一种新的编程模型,但设计师并不完全陌生。他们将“了解”Flex 的工作方式,比他们理解的使用新的功能较差的工具和新的动画范例启动新的设计环境要快得多。摆脱 Silverlight 中的 RGB 颜色模型 - .NET 最初是为 Windows 构建的,它是其工作方式的核心。 Flex 很久以前就放弃了以设计为中心的模型。您的所有工具都在您的 Mac 上运行。纳夫说。很酷的功能——Silverlight 在一些明显的功能(如网络摄像头/麦克风集成,或 3d/图形加速)上仍有一些赶超 Flash 的能力。
我们同时在做 silverlight 和 flex,这里是开发者对两者的观点。
Silverlight 的优点:
C# 的强大功能、代码片段、重用现有 C# 算法实现以及其他语言的强大功能、泛型和 Linq 等 CLR 的本机执行功能而不是 Flash 的动作脚本解释器一个集成的 Visual Studio for All Development Expression Blend 真的很酷和更高级的编辑器然后 Flex Builder XAML 对搜索引擎友好 非常好的状态转换并且易于定义 线程和异步任务 可访问性,没有人知道微软总是在其所有产品上提供最好的可访问性功能,他们总是与残疾人合作得很好,比较仅浏览器 IE 支持完全可访问性,而 Safari/firefox 等则更接近。
Silverlight 的缺点:
严格来说是微软平台,我知道很多人会争论,但在目前的情况下,一半的英特尔 Mac 用户无法使用 silverlight 3.0,所有 PPC Mac 用户都无法使用 Silverlight 2.0 及更高版本,并且没有适用于 Linux 的 silverlight。有mono,但微软没有官方支持,它总是落后于逆向工程.NET和移植到其他平台上,它还不是开箱即用的。大多数组件/控件都是“密封的”,因此很难扩展它们并覆盖以轻松制作新组件。错误的 CustomControl/UserControl 架构。例如,您不能将 XAML 的根作为 ComboBox 或任何其他控件并让它同时具有设计和代码,您可以创建自定义控件但它们太复杂了绑定需要组件命名并且不支持像 flex 那样的实例表达式,尽管有两个绑定方式在silverlight中很好,但是您必须为一个数学表达式的多个绑定编写长代码
例如 // 这在 flex 中是可能的.. // 但在 silverlight 中不行
Flex的优点:
真正独立于平台,支持各种硬件和操作系统,并且真正在任何地方都能很好地工作。开源使理解和扩展功能变得非常容易。每个控件/组件都可以扩展,并且覆盖默认行为的限制更少。创建新组件的最简单方法,您可以让 mxml 从任何控件派生并通过广泛的绑定扩展它们 Flex 包含许多控件,您不需要任何第三方库
Flex的缺点:
迭代执行速度慢,没有线程!没有异步任务!!基于第 1 点,不可能有出色的动画或图形 没有泛型,没有其他语言,没有 linq .. Number 类有一个错误,不能存储完整的 64 位长值 Eclipse 不能设计一些很棒的 UI
结论
我们将 flex 用于数据应用程序,这些是简单的表单处理应用程序 Silverlight 用于极其丰富的图形和动画
Silverlight 的问题在于仍有很多人没有安装它。此外,如果您现有的 .Net 开发人员只熟悉更传统的服务器端 .Net 编码,我不确定他们能够如何利用他们现有的技能。
您将 Silverlight 推向 Flex 的原因是什么?如果您必须向 SOFlow 社区询问原因,您会如此愿意推动它,这似乎很奇怪。
Flex 开发的另一个优点是您可以切换到使用相同的源代码(和相同的 IDE)开发桌面应用程序 (Adobe AIR) 并从 Web 分发它们。您可以查看 this,了解 Flash 平台的未来。
2011 年第三季度更新:Flash 11 支持低级 3D 加速,并且已经有许多框架和主要引擎(虚幻引擎 3、Unity)支持它。然而,未来的卖点是 AIR 应用程序将在 Windows、Mac、Android、Playbook 和 iOS 平台上运行(Linux 支持已被删除)。在它们之间移植(至少在您拥有 Adobe CS5.5+ 时)之间的麻烦绝对最小。
2015 年第 2 季度更新:Silverlight 正式死亡。 Adobe AIR 还活着,但并不繁荣——根据您的技能和工具链,它可能很有用。 Microsoft 和 Adobe 都承认 HTML5 是要走的路(无论是使用 AIR、Apache Cordova 还是 Visual Studio)。
2017 年第 3 季度更新:哈哈哇,谁甚至不再使用 Flash。
不要忘记:
Flex 非常跨平台,因为它使用 Java 编译器进行编译,这意味着您可以在开发 Flex 应用程序时轻松使用 Mac 或 Linux。我有我当前的 Cruisecontrol 设置(使用 Linux) 我构建了 Flex 应用程序,但开发人员同时使用 Mac、Linux 和 Windows。
根据我的经验,Java 开发人员在 Flex Builder 中感觉很自在,因为它基于 Eclipse。
你永远不会在 SO 上对这个问题进行公平投票,因为它有这么多 Microsoft 开发人员。
此外,人们可能会否决这个答案,这确实说明了一切。
我说让你的开发人员尝试这两个平台,看看他们更喜欢哪个。
为了回答下面的评论,我注意到虽然有很多推荐 Flash / Flex 的答案,但 Silverlight 有更多的赞成票。这不是说谎的问题,只是偏爱自己熟悉的东西,不一定是最好的平台。
当谈到 Flex 时,Silverlight 程序员不知道他们错过了什么。 Silverlight 缺少 Flex 所具有的组件模型和事件触发功能。使用 XNA 和 C#,我的一个朋友必须跳过各种障碍才能让他的 Silverlight 应用程序正常工作。然后,它必须交给设计师才能让它看起来不错。
收听 Silverlight 上的 deepfriedbytes.com 播客,您会听到即使是真正推动 Silverlight 的几个人如何承认其中的一些问题。 (我想,如果我没记错的话,其中一个人在微软工作,但我可能是错的——我上周听过)。他们同意 Silverlight 在当前状态下还没有为任何大型应用程序做好准备。
我会选择 Flex,因为它是一种简洁明了的方法——特别是如果您已经熟悉 Flash 和 ActionScript 3.0。在我看来,Flex 更有意义 - Silverlight 仍然需要成熟。
归根结底,您的开发人员不应该支配您的技术。这绝对是一个应该基于您的用户的产品决策。
如果您要部署到消费者 Internet,则 Flash Player 或 AJAX 是您的最佳选择。如果您要为 .net 企业部署到专用 LAN,您可以选择。
作为图形设计师,我在过去几年中使用过 Flash(打开和关闭),在过去 1.5 年中使用过 Silverlight(及其老大哥 WPF)。根据我从我的团队(他们都是开发人员或以前的开发人员)那里听到的信息,如果您的 .Net 开发人员将进行所有编程,请使用 Silverlight。我喜欢 Flash,但即使对 ActionScript 3 进行了 OOP 大修Flash 9 及更高版本,它仍然是一种有点古怪的语言,在 AS3 和 C# 之间来回切换可能会让您的开发人员发疯:-)。
对于您的设计师,请执行以下操作:
给他们一份 Expression Blend 的副本,这是 Silverlight/WPF 的 GUI 开发工具。
Blend 的初始学习曲线有些陡峭,并且界面会向您抛出大量变量/选项,因此请进行一些培训,并让您的设计师有时间熟悉 UI。
说到培训,请订阅 Lynda.com 视频库,尤其是。 Lee Brimelow Expression Blend 培训课程。
注意事项:Blend 和 WPF 变化迅速,因此有时您会遇到 Blend 中的错误,这些错误已在 Blend 的下一个 beta/CTP 中修复。例如,Blend 2 中有一个错误阻止我的故事板(动画)在最近的项目中工作。我升级到 Blend 2.5CTP,它工作。
Silverlight 内容似乎并不总是适用于 Silverlight 插件的最新 Beta,如果您正在测试一些仅在最新 Silverlight 插件中可用的新功能,请记住这一点。
投资一个强大的系统(四核、4G 内存等)Blend 会消耗大量资源,尤其是。当你有很多层时。例如,我正在开发一个应用程序,其基础应用程序中有超过 100 层(!)(在某些用户控件中还有 100 层以上),以及大约 40-50 个故事板。每隔几分钟,我必须重新启动 Blend,因为 UI 停止响应(但不会冻结)。要么,要么将所有可能的东西移到用户控件中。
我的团队过去使用 Flex 编写丰富的 Web 功能,现在使用 Silverlight 编写它们。
我们进行此切换的原因:
FlexBuilder 基于 Eclipse 构建。日食太可怕了!免费,但漏洞百出,漏洞百出且速度缓慢。
FlexBuilder 的价格是 Expression Blend 的两倍,无论如何我们都可以通过 MSDN 免费获得。
Flex 对源代码管理来说很痛苦,它不喜欢将文件放在一个地方,并且它与您解决方案的其他部分不兼容(我们尝试使用 SourceGear Vault 和 SVN)。
Flex 的 ActionScript 版本不喜欢大多数 SOAP 实现,特别是它与 .Net WebMethod 的实现有各种问题。
尽管我们定期使用许可的 Flex 组件,但它决定我们没有该版本并添加了仅演示水印。删除它的唯一方法是将项目分解,重新安装 Flex,重新安装许可证并重建它。
FlexBuilder 根本不喜欢 Vista。
Silverlight 的接受度正在增长,一旦达到我们可以将其添加为我们切换的相关功能的要求的水平。如果我们为网络(而不是企业)受众工作,我不确定我们是否可以拥有。
我们项目的其余部分是 .Net 和 C#,您可能会发现所有这些问题在 Java 商店中都不那么重要。
正如 Kibbee 上面所暗示的那样,利用现有 .Net 开发人员的论点并没有多大意义。成为 .Net 开发各个方面的专家是不可能的。平台太大了。 Java 也是如此。从技能的角度来看,Silverlight 的唯一目标是您可以使用自己喜欢的 .Net 语言进行编码。如果您已经在使用 JavaScript 进行任何重要的 Web 开发,那么这个优势就相当小,因为 Action 脚本是一种变体。所以真正将程序员转换为 Flex 或 Silverlight 就是学习平台的 API。
我们经历了同样的问题,Flex 赢得了胜利。我们的 .NET 开发人员起初很担心,但在 Ajax 和 JavaScript 的痛苦中工作了这么久之后,他们现在喜欢并且非常喜欢在 Flex 中工作。
这是一个简单的测试给你。 . .尝试找到至少 3 个真实世界 Silverlight 应用程序的示例(不是游戏、视频播放器或小工具)。然后对 Flex 执行相同的操作。
尽管我已经使用 Silverlight 完成了工作,并且对能够让应用程序存在于浏览器之外的能力感到非常兴奋,但 AIR 的一个巨大好处是提供了对本机拖放功能的访问。这允许您构建非常用户友好的图像或文档上传功能(例如 Flickr 上传器)。据我所知,MS 还没有专注于那种支持(即没有宣布计划)。
我认为 Silverlight 和 XAML 比 ActionScript 更可取,虽然我不熟悉 ActionScript IDE,但我熟悉 VS2008 和 Expression Web/Blend,它们是非常好的开发环境,并且一直在变得更好。我会选择 Silverlight,我认为让用户安装插件的关键是要有一个好的插件检测页面来解释什么是 SL 以及他们为什么需要它。有关这方面的示例,请转到 http://memorabilia.hardrock.com/ 并在禁用 SL 插件的情况下尝试。
我使用这个经验法则:如果您的公司正在开发基于 Internet 的多媒体软件,并且拥有使用各种平台的客户,并且您没有进行数据库密集型应用程序,那么如果您的公司同时开发基于 Internet 和 DVD 的产品,那么 Flex 是明确的答案,较少交互但更密集(CPU,内存)并使用大量的数据库事务 Silverlight 更有意义
有人说:“找到 3 个真实世界的 silverlight 应用程序”。好的,我知道一些在我的头顶上,但我还是用谷歌搜索了它。名单:
2008 年北京奥运会(此处为统计数据,已交付 250TB 数据!)
Netflix点播播放器
AOL 电子邮件客户端(可能尚未发布)
哦,不是视频播放器?那么剩下的就是 UFC 应用程序(它是一个混合视频/聊天/其他东西)和 AOL 电子邮件客户端。 Silverlight 擅长视频,这就是它获得立足点的地方,但这并不意味着它不能做其他事情。我认为没有理由仅仅因为它的视频效果很好而忽略它。
Infoworld [link] 表示,“Silverlight 具有巨大的技术优势和相对较好的性能。它是一种非常强大的 RIA 技术,对于具有 .Net 经验的程序员和具有 XAML 经验的设计师来说尤其有用。”这是一篇关于您的问题的好文章。
我的回答:如果你有一个熟悉 .NET 的开发团队,那么 Silverlight 应该是你的首选。如果不是,那么这就是一个真正的折腾。我看过一些文章说,与使用 Flex 的开发平台相比,Visual Studio 是一个更出色的开发平台。但 Flash 几乎无处不在。
还要记住,Silverlight 2 几乎不使用 Javascript(我认为没有,但我并不肯定)。因此,任何因为 JS 而避免使用 Silverlight 的做法都是没有根据的。
如果性能很重要,Silverlight 就赢了。我已经看到我的浏览器的 CPU 使用率多次达到 100%,并且杀死任何正在运行 Flash 的窗口总是摆脱它。在 Chrome 中尤其明显,您可以在其中看到消耗 CPU 的进程。如果您对 Silverlight 的游戏潜力感兴趣,请寻找 QuakeLight,Quake 的 Silverlight 端口。它的形状真的很好。
我真的认为这取决于你的开发人才在哪里以及你将交付什么样的应用程序。简单的游戏?闪光。业务线应用程序?银光。中间?遵循您的开发人员推荐的内容。
如果您了解 .NET,Silverlight 3.0 就是您的最佳选择。我正在使用它,我喜欢它。我不必弄乱 AJAX 或 JS BTW(我不知道那个人指的是什么,也许是 SL 1.0) 对于数据,它主要是异步 WCF 调用(WCF 后面的 LINQ to SQL)或 XML 文件或 RIA 服务。它让您可以使用大多数着色器 FX,它具有样式、控件模板和本机访问 windows/mac 剪贴板。我可以运行高清视频,即使在慢速 CPU 下,大多数进程也运行良好。我也喜欢数据绑定、控件绑定和可观察集合为我节省了很多时间。另外,我可以使用 LINQ,节省大量时间,更不用说使用 Visual Studio 进行调试了。
我正在开发企业 .NET 应用程序,所以我知道我的安装基础,他们会安装插件(通常 30 秒)。对于前端网站,您可能会失去一些不想安装 silverlight 或不运行 Mac 或 Windows 的用户。您可以在 3.0.0 浏览器之外拥有带有 SL 的应用程序。
我可能是一个有偏见的 .NET 人,但我发展得如此之快,我不得不推荐它。
您真的不应该使用任何这些 ActiveX2.0 技术。 Silverlight 和 Flex 都不是...
首先,它们都只不过是“支持在浏览器中运行的分布式winforms框架”,其次它们不能很好地移植到其他设备(尤其是Silverlight),第三它们不起作用与您页面的其他部分相得益彰。它们不适用于残疾人等,等等,等等。列表无穷无尽......
Adobe 和 Microsoft 都非常努力地试图隐藏这一事实,但归根结底,Silverlight 和 Flex 都不过是新包装中的 ActiveX……
当然,它们在沙盒中运行,是托管语言等等。但它仍然是一大块 BLOB 被下载以在您的浏览器(AKA ActiveX)中本地运行......
这是一个老问题,历史已经说话了!
Silverlight 已经被微软抛弃了,它从来没有获得有用的安装基础。由于 Microsoft 未 100% 承诺而导致的一方。
Flash(因此 Flex)仍在继续。然而越来越多的浏览器不支持任何插件,所以flush走上Silverlight的道路只是时间问题(几年)。
也许有一天 Flex 会重新定位到没有插件的 HTML5 ......
iPhone 被说出,它说唯一的选择是 Apples Way 或 HTML5。
Flash Player 在几乎所有桌面平台(Windows、Linux、Mac)中都可用并得到正式支持,而 Silverlight 将主要在 Windows 中得到支持。
以下 article 提供了两种平台的比较。