Flex/Silverlight 的技术比较

Flex/Silverlight 的技术比较

 

<!-- /* Font Definitions */ &#64;font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} &#64;font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} &#64;font-face {font-family:"/&#64;宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ &#64;page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} &#64;page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} /* List Definitions */ &#64;list l0 {mso-list-id:253052372; mso-list-type:hybrid; mso-list-template-ids:1247551086 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} &#64;list l0:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:21.0pt; mso-level-number-position:left; margin-left:21.0pt; text-indent:-21.0pt; font-family:Wingdings;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

基于个人的使用经验,我从语言、框架、 开发环境和运行环境四个方面对 Flex Silverlight 这两门技术做一个比较,自己认为这个比较还是比较全面的。(这样的比较有意义吗?个人意见,只要别 把自己当成宗教教徒,将语言看作工具而不是信仰,那么比较就是有意义的。)

 

语言( Silverlight C# 为准)

特性

比较

胜出

Flex

Silverlight

语法

Flex 的编程语言 ActionScript 在变量与属性声明 的方面语法有一点罗嗦(有些类似 VB ):

public var varName : int;

相比之下 C# 就要简洁一些:

public int varName;

不过, ActionScript 支持以字面量的方式声明字典,这方面又比 C# Dictionary 来得简明:

public var dict = { x: 1, y: 2 };

 

语言特性

ActionScript 支持动态类属性,这 是 C# 目前所不支 持的,因此在动态编程方面, Flex 要简洁得多,也减少了很多代码生成的工作。

 

OO 特性

ActionScript 不支持抽象类和抽象 方法。虽然对一般性的编程来说没有太大问题,但是对框架设计来说这是一个严重的缺点。

 

反射

反射对于元编程是相当重要的。 Flex 的反射机制比较原始,只支持有限的反射方法,并且代码中没有明确引用的类在编译阶段会被排除,这使 得动态创建类更为麻烦。

不过得益于语言的动态特性, Flex 反射代码比同等的 C# 代码要更加简明。

Silverlight 也排除了一些高级反 射特性(比如 TypeDescriptor 相关的一些方法),不过总体来说反射机制还是比较完整的,但同时反射的语法比较罗嗦。

 

基本类库

Flex 的基本类库相当精简,精简的代价就是 有些基本功能(如字符串的 trim 、日期的格式化)都欠奉,不得不求助于工具类库。 Flex 的集合类库功能也有一些薄弱。

Silverlight 类库也比完整的 .Net 类库精简了许多,有些时候如操作 Xml 的时候不大顺手。不过大体上来说还是够用的。

 

扩充特性

E4X Flex 的独有特性,在 Flex 中使用 XML 简单到了让 Linq to XML 也相形见绌的地步。

Silverlight 胜于 Flex 之处包括: Linq to object lambda 表达式和显式多线程,这些都是 Flex 所不支持的。

 

语言支持

Flex 只支持 ActionScript Silverlight 则支持 C# VB IronPython IronRuby JScript 等多种语言。但不论 Visual Studio 还是 Expression Blend 都没有为 脚本语言创建项目提供任何支持,这使得 Silverlight 的多语言优势打了一个很大的折扣

 

总的来说,语言方面是 Silverlight 大胜 Flex

 

框架

特性

比较

胜出

Flex

Silverlight

界面组件

经过几年发展, Flex 的界面组件已经比较完整。基本框架中包括超过 50 个界面组件,远远超过 Silverlight 的组件数量。但是 Flex 里也缺少如 AutoComplete 等少数重要组件。

Silverlight 本身就组件数量和功 能方面远逊于 Flex ,不过添加 Silverlight Toolkit 以后可以在一定程度上弥补其不足。

 

布局

Flex 的布局机制简单且灵活。 Canvas 支持多种对齐和摆放方式,灵活 性远远超过 Silverlight Canvas ,是布局中最常使用的组件。 Canvas HBox VBox 三个组件基本上可以包揽 90% 上界面布局的工作。

此外, Flex 中还有一些布局组件如 Panel Form ViewStack Silverlight 所缺乏的。 Flex 还支持基于辅助线的布局, Silverlight 里面没有这样的功能。

Silverlight 的布局组件不仅数量 少,基于附加属性的语法也比较冗长拖沓。

 

样式

Flex 的样式语法基于 CSS ,非常简洁,且对于熟悉 HTML 的用户来说马上可以上手。

Silverlight 的样式声明语法相当繁琐。比较一下 Flex/Silverlight 的样式设置:

Flex:

Button { margin: 10; }

<mx:Button />

 

Silverlight:

<Style x:Key=”component” TargetType=”Button”>

    <Setter Property=”Margin” Value=”10” />

</Style>

<Button Style=”{StaticResource component}” />

可以看到,相比 Flex 所用的 CSS 语法来说, Silverlight 中超过一半以上的代码 是纯粹的语法噪音,只是为了方便解析器而设计的,对设计者来说完全是不必要的额外负担。此外, Silverlight 并不直接支持类似 Flex 的全局样式。虽然 StyleManager 可以达到类似的效果,但语法更加罗嗦,会使得 XAML 更加冗长。

 

动画

Flex 有多达 10 多种动画。 Silverlight 基于依赖属性的动画只 相当于 Flex AnimationProperty ,数量 和功能都比较受限,并且只对于 Dependency Property 有效。

 

数据绑定

Flex 的数据绑定语法直观且简洁,可以使用 几乎任意的表达式。声明绑定属性的语法也相当简单,任何属性只要加上一个 [Bindable] 标签即可。

Silverlight 的数据绑定语法相当累 赘,至少造成了两个严重后果: 1 、大量数据绑定属性是造成 XAML 冗长难读的罪魁祸首; 2 、依赖属性编写很麻烦,需要大量样本代码,而许多框架特性又严重依赖于依赖属性,使得编写 Silverlight 组件成为相当累人的 工作。

 

通信机制

Flex Silverlight 都支持大量标准化的通 信机制,包括 XML Web Service 和二进制数据等,支 持程度也大致在同一水平上。

Flex 略微胜过 Silverlight 的地方在于 Flex 有一个标准化的二进制通讯标准: AMF ,基于 AMF 的服务框架不论开源或商业的目前都有广泛的应用。 Silverlight 在这方面还是一片空 白。

 

异常处理

Flex 的一个问题是不支持全局异常处理,对 框架设计而言这是明显的缺憾。

Silverlight 支持应用程序级别的全局异常处理。不过这个异常处理似乎也不是非常完整,有个别异常还是会漏网,造 成 Silverlight 插件出错。

 

国际化

Flex 对国际化的支持比较完整,使用上也很 方便。唯一的小问题是支持额外的语言需要要执行一次 copylocale 命令行。

Silverlight 对国际化的支持是有问 题的,虽然可以使用,但要做很多手工工作,并且需要一些 work around 才能成功执行。

 

 

其他特性

Flex 包括一个非常方便的界面特性: State ,在界面有少量变化的时候使用非 常方便,可以避免很多不必要的编码。这是 Silverlight 所欠缺的。

Silverlight DeepZoom Flex 所没有的功能。

 

外观

外观是否好看应该说是个见仁见智的问题。不过 Flex 似乎在细节方面做得更好,请看 Flex/Silverlight 默认按钮外观的比较:


Flex 组件默认情况下就有一个相当合适的边距,看起来很舒服,基本上不用再作什么调整。 Silverlight 就差多了,密密麻麻 的挤在一起,显得非常局促,必须在样式上作很多调整才会比较好看。在这些细节上 Silverlight 明显不如 Flex

 

 

框架方面 Flex 可以说是大优势战胜 Silverlight

 

IDE

特性

比较

胜出

Flex

Silverlight

可视化设计器

具有讽刺意味的是,号称 Visual 的微软开发环境在 WPF 时代就再也难以自称 Visual 了。 Visual Studio 中的 Silverlight 可视化设计器目前只能说是一个废品,拖拉不能用,属性设置不能用,预览也不能用,并且常常假死,微 软自己都似乎不好意思把它显示出来了。 Expression Blend 说实话也并不好用,不过它编辑 XAML 时的性能倒是比 Visual Studio 好多了,至少不会出现经常假死的情况。

Flex Builder 编辑器经过几年发展,在可视化设计上已经达到不错的水准,使用也相当方便。不足之处在于不能同时打开 太多页面,不然内存的耗用会相当惊人。

 

代码编辑

在代码编辑的方面则是 Visual Studio 要比 Flex Builder 表现更好。对于代码辅助和编辑提示方面, Visual Studio Flex Builder 表现更加成熟。

不过 Flex Builder 也有 Visual Studio 所不及之 处: 1 、类导航的 功能更加丰富,使用快捷键比 Visual Studio 中更迅捷; 2 、无论设计还是代码视图都支持文档大纲,浏览和跳转更加方便; 3 、指定文件编码也要比 Visual Studio 要容易。

 

代码隐藏

由于 Flex Builder 并不直接支持 Code Behind 模型,因此在界面和对应代码的管理上要比 Visual Studio 麻烦一些。

 

编辑器性能

对于可视化编辑器而言, Flex Builder 的性能要比 Visual Studio 好得多。对代 码编辑器而言 Visual Studio Flex Builder 表现差不多,但 Flex Builder 占用内存比较厉害。

 

编译器性能

Flex 编译性能一直都是一个饱受诟病的重大 问题。在项目大到一定程度,编译效率就开始急剧下降,编译一次需要三四十秒是常有的事。(据说有人编译一次甚至需要 20 分钟以上,不过我还没有遇到)

Flex 编译慢是有原因的,因为编译器替程序员完成了相当多的工作。如果你打开 -keep=true 编译开关,检查一下生成 的代码,就知道编译器的工作有多繁重了。如果愿意放弃一些可视化特性,手工编写 ActionScript 组件而避免使用 MXML 组件,就可以在很大程度上提高编译效率。

从长远角度来说,我认同 Flex 这种设计思路,用机器效率来换取程 序员效率是值得的( Unix 格言:宁用计算机一分,不花程序员一秒。)但对于眼下的机器性能来说, Flex 编译性能还是一个无法忽略的问题,编译速度太慢会拖慢迭代开发的节奏,对程序员的心理也不能不说是 一种折磨。

Silverlight 编译效率还是不错的,代价就是冗长的程序代码需要程序员自求多福了,编译器的工作实际上是很轻松 的。

 

调试

在开发环境的支持下, Flex Silverlight 的调试都比较方便。 Flex 的一个小问题是开发人员需要单独安装一个 Debug 版本的 Flash Player Silverlight 则不用,所以 Silverlight 更加方便一些。

Silverlight 缺少 Flex Builder 内置的 Profiler ,没有简单的方法进行性能 测试。传统的 .Net 性能测试工具基本上都不支持 Silverlight

 

开放性

基于 Eclipse Flex Builder 开放性明显要优于封闭的 Visual Studio ,有大量免费的 Eclipse 插件可以直接拿来使用。不过有 少量插件会与 Flex Builder 产生冲突。如果没有大量的 Java 开发工作,那么安装 Flex Builder 完整版要比插件版更加稳妥并且简单。

Visual Studio 的插件数量不多,配合 Silverlight Tools 使用的目前基本上还没有看到。

 

IDE 方面 Flex Silverlight 各擅胜场。

 

环境

特性

比较

胜出

Flex

Silverlight

插件大小

目前 Flash 插件安装包大小为 1.8M 左右,这么小的体积包含了完整的插件功能可以说是一个了不起的成就。但 Air 的安装包就有点大到离谱了(约 15M ),这是因为 Air 还附带了一个内嵌的 HTML 解析引擎 WebKit

Silverlight 插件安装包大小为 4M 出头,比 Flash 大了一倍还多。我比较不理解的一点是既然体积已经这么大了,为什么不干脆把 DockPanel TreeView DatePicker 这些重要的组件加进 去,反倒是 MultiScaleImage 这样未必有多常用的东西成了核心组件?让大量插件用户去另外下载 System.Windows.Controls.dll 实在是个不小的负担。

 

安装

Flash 的插件基本上可以做到全自动安装升 级,不必用户手工参与。这也很容易理解为什么 Flash Player 能够成为占据全球 95% 以上电脑的装机量最大的软件。

Silverlight 插件要麻烦一些,必须用户手工执行安装步骤,这势必影响 Silverlight 插件的普及。当然微软 也可以使用诸如捆绑安装之类的市场手段,这就不再属于技术讨论的范畴了。

 

运行性能

我没有作过这方面的测试,就使用感觉来说还没有发现明显差别。不过我看到外国已经有这方面的测试,结 果认为 Flex 在 画面渲染效率上优于 Silverlight ,而 Silverlight 则在数学计算上效率高过 Flex 。考虑到 Adobe/Macromedia 就是以图形起家的,而微软在编译器上已经深耕多年,这个结果应该不会让人感到惊讶。由于浏览器插件 的主要功能还是提供显示,用于大量数学计算的场景并不多见,看起来 Flex 还是占有一定优势。

 

环 境方面 Flex 仍 然占有优势。

 

 

最后再说一些比较琐碎的话题,因为不太好分类,并 且主观意味比较浓厚,就不再详细比较,当作姑妄言之好了。


 

Flex Silverlight 目前来看都是存在一些 问题的。有些属于语言设计的范畴,比如 ActionScript 的声明语法比较罗嗦,而 Silverlight 则是绑定属性的语法特别累赘,但这些问题受系统设计限制,基本上已经没有修改的余地了(除非整个框 架推倒重来)。另外一些问题是比较严重但是有望解决的, Flex 方面是大项目中的编译速度让人抓狂,不过在 Flex Builder 4 beta 中似乎已经看到了改善的迹象。 Silverlight 则是框架还不够完 整,界面组件有限。 Silverlight 3 已经比 Silverlight 2 有所提高,加上 Silverlight Toolkit 一类扩展可以得到很大改进。 Silverlight 的另一严重问题是 IDE 工具完全没有达到应有的水平, Visual Stuido 插件可用性非常 差,此问题从 Silveright 2 3 以后反而有恶化的趋势, VS2010 似乎又是个极其吃机器的怪兽,这个问题短期内能否解决,实在让人无法乐观。


 

如果从程序员的观点来看, Silverlight 的语言特性要比 Flex 更佳: .Net 框架结构上更加完备、多种开发语言支 持、 Linq 和客 户端多线程,这些都是 Flex 所欠缺的特性,应该为 Silverlight 额外加分。可惜受到开发工具和应用范围的限制,这些优势目前并没有充分发挥出来。此外,从从业人员的 现状来看, Flex 语 法更加简单、容易上手,对非程序员颇具吸引力,而 C# 对这些人来说门槛实在有点过高。所以这些特性是好是坏,眼下也不太好作出结论。


 

从社区来说, Flex 目前已经拥有相当数量的用户和开发社 群,其独有的特点是来自设计者和程序员两个背景完全不同的群体,因此意见和风格常常参差不齐,好处是能够看到不同观点的碰撞,比较有活力。 Silverlight 社区规模还比较小, 基本上全部来自微软开发者阵营,背景相当一致,对程序设计通常能够有很好的观点,缺点是对 UI 设计师的团体和理念缺乏了解,解决思路大多是以程序员为本位的。另外一个似乎不利于 Silverlight 的现状是: Java/ 开源阵营基本上不会考虑使用 Silverlight ,反或来说,以微软 技术为平台的开发者倒是还有相当一部分会采用 Flex (从博客园的话题分类也可以看得出来)。


 

Flex Silverlight 未来的趋势如何?看一看这两个技术近几年的发展趋势, Flex 仍然具有领先优势,但该优势目前已经 有所缩小:

  • Flex 2 Silverlight 1 没有什么好比较 的, Sliverlight 1 功能实在太过贫弱,这时 Flex 遥遥领先;
  • Flex3 Silveright 2 相比, Silverlight 在框架结构上比版本 1 已经有改天换地的提高,拉近了和 Flex 的距离,但可用组件仍然严重不足;
  • Silveright 3 在结构上没有什么 重大改变,主要在于功能的完善。如果说 Flex 2 Silverlight 1 领先整整一步的话,那么到 Siliverght 3 ,这个差距已经缩小到半步, Silverlight 在部分特性上甚至超越 了 Flex



目前, Silveright 3 刚刚出现,各方面的 支持仍然有待跟进, Silverlight 4 眼下还看不到什么消息。而 Adobe 已经开始准备 Flex 4 ,目前释出了第一个 beta 版本,从已经知道的情况分析,这个版本在框架上将会有相当重大的修改,明显意图再度拉大与 Silverlight 的差距,在许多方面 都设计得更加灵活。但兼容性究竟如何、能否允许从前的用户平稳过渡,将会是 Flex 4 面临的主要问题。



我以前曾经说过,现在仍然这样认为:鉴于微软自身的市场定位,它绝不希望基于 Web 的技术强大到足以让用户忽略浏览器和 操作系统的地步。因此 Silverlight 将来究竟能发展到什么程度,长远来看还是不得不打上一个很大的问号,即使目前来看微软仍然在力推这门 技术。不过已经使用了 Silverlight 的同学也无须太过顾虑,只要是微软推出的技术,不论好或不好,就算是被放弃以后也还能够生存相当一段 时间(看看眼下的 IE6 )。眼下, Flash 在诸如在线视频等市场的领导地位是不争的事实, Silverlight 暂时还没有直接与其对抗的力量,并且它们还都面临着一个共同的对手—— Ajax ,未来还会有 HTML5 来搅局。所以今后一段时间,我们 大概只能看到它们之间发生一些小规模的局部战争。 Flash Player 在浏览器中的覆盖率现在超过 95% ,地位已经极其稳固,有如今日之 Windows ,但同时也意味着基本上再没有上升的空间,只能依势固守。而 Silverlight 则有望以后起之秀的姿 态从 Flash 中 抢走一部分市场份额,然而考虑到其他厂商对微软的警惕心理和 Web 标准领导话语权的力量, Silverlight 恐怕也难以取得非常理想的战绩。作为用户的我们,其实也没有多大必要去在意谁会是最后的赢家(历史 为鉴,最终的赢家最初通常都在人们的视野之外。 Google 勃兴而引导网络时代,当初没有任何人预见到),只要领会时代和技术交锋进步的精彩之处就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值