自 Silverlight 1.0 发布以来,Web 开发与设计者们关于该选择 Flash 和 Silverlight的争论便开始了,在成熟的 Flash 面前,Silverlight 面临着如何赢得市场的难题。然而 Silverlight中包含了一些开发设计者们一直希望 Flash 能拥有的功能,诸如SEO,本文对 Flash 和 Silverlight的技术细节进行了详尽的对比。
动画功能
Flash 使用基于帧的动画模式,在逐帧动画模式中,我们为每个帧创建对象并生成动画序列。比如你想让一个对象在3秒内穿过屏幕,计算一下3秒一共有多少帧,然后计 算每帧需要的矩阵。不过 Flash 在实际播放中并不会真实地按设定的帧率播放,除非你在动画中插入一条空白的音轨。
Silverlight 基于 WPF 动画模式,WPF 是基于时间线,而不是帧的,你定义好起始于结束状态,WPF 帮你计算中间该怎么做,不必象 Flash 那样同矩阵打交道,也不必计算在不同帧对象的位置。
文件尺寸
Flash 使用压缩格式,文字和图片内嵌在整个文件中,因此 Flash 的文件尺寸非常小巧。
Silverlight 使用 XAML 作为描述语言,未经过压缩,因此 Silverlight 的文件尺寸通常要大一些。
脚本
Flash 使用 ActionScript, ActionScript 面向对象,对用户界面设计有全面的控制,还可以同其它后端语言,如 PHP, ASP, Ruby On Rails 进行集成交流,拥有一个强大的开发库。
Silverlight 的脚本可以选择多种开发语言,Visual C#.Net and Visual Basic.Net,也包括客户端语言 JavaScript 。 C# 和 VB.net 可以用来编写托管代码,并可以全面使用 .net 框架库。
视频和音频
Flash 支持多种音频格式,最新的音频解码器质量非常高,而带宽占用也非常出色。它的视频解码器,Sorenson 的专用 H.263 是 H.263 的变种,压缩也接近,但去掉了一些功能。
Silverlight 使用的是行业标准 VC-1 视频解码,并支持 WMV 和 WMA,Windows Movie Maker 可以很容易产生这两种格式,同时微软还提供免费的 WMV, WMA 编码器。
声音处理
ActionScript 提供了一套声音类库,可以用来在动画中生成或控制声音,你可以在动画播放期间从资源库加入声音,同时 Flash 还有一些方法在整个动画中控制声音。
Silverlight 没有底层声音控制 API,甚至无法播放一个 WAV 文件,因为 .NET 在音频播放上很薄弱。
可访问性
对那些有视觉或听觉缺陷的人,Flash 提供了丰富的可访问性功能,视频字幕可以帮助听觉障碍者,而那些视觉障碍者需要通过键盘控制声音的播放,人们可以使用键盘快捷键控制视频播放。
Silverlight 3 首次提供对全部系统配色的支持,那些视力不佳的人可以调整到高对比度配色方案,在可访问性方面 Silverligth 比 Flash 差很多。
平台兼容性
Flash 支持 Windows Vista/XP/2000, Windows Server 2003/2008, Mac OS 10.1/10.5(PowerPC), Mac OS 10.1/10.5 (Intel), Linux 5, openSUSE 11, Ubuntu 7.10or later and Solaris 10.
Silverlight 只支持 Windows Vista/XP/2000,Windows Server 2003/2008, Windows Mobile 6, Mac OS 10.1/10.5 (PowerPC)and Mac OS 10.1/10.5 (Intel)。由于不支持 Linux 和 Solaris,因此这些平台的用户无法体验Silverlight 。(不过 .NET 在 Linux 平台的第三方开源项目,MONO 框架中的 MoonLight 支持 Linux -译者)
文字展示与SEO
Flash 中的文字是基于图形的,Flash 播放器无法理解 TTF,因此我们无法从 Flash动画中分离出文字。通常,Flash 对 SEO 是不友好的,但 Adobe 已经做出一些努力让 Flash中的文字可以索引,而搜索引擎也开始尝试索引 Flash 了。目前,Google 是唯一支持 Flash 索引的搜索引擎,他们同 Adobe合作,设计相应的可以理解 Flash 内容的 Google 爬虫。 Yahoo 正在进展中,鉴于微软的 Silverlight 是 Flash的竞争者,他们不大可能在 MSN 中索引 Flash。
Silverlight 是基于 XAML 的,Silverlight 中的文字内容是独立存放的,可以被任何搜索引擎索引,因此对搜索引擎更友好。
支持的图片格式
Flash 支持几乎所有图片格式。Silverlight 只支持 PNG 与 JPEG,其它格式提供有限的支持。
网络编程
Flash 使用 XMLSocket 和服务器进行沟通。
Silverlight 通过 System.Net.Sockets 命名空间,对网络编程提供全面支持,Silverlight 可以通过 4502 到 4534 端口异步传输数据,也支持跨域通讯。
摄像头的支持
Flash 支持网络摄像头和麦克风,使用 ActionScript 可以很容易操控摄像头或麦克风。Silverlight 不支持摄像头和麦克风。
部署
Flash 的部署只包含一个独立的 SWF 文件,这个文件已经包含了所有图片,文字,动画。Silverlight 的部署要复杂一些,所有独立的部件都要单独部署,典型的 Silverlight 请求一般包含以下内容:
- XML 文件,
- DLL 文件(如果有),
- Silverlight.js,
- 其它JavaScript 文件,
- 资源文件 (图片,视频,音频)
Windows 可执行文件
Flash 动画可以编译成独立的 Windows 可执行程序,在桌面播放。
Silverligth 不支持。
流媒体服务
Flash 不支持流媒体服务(虽然 FLV 控制了几乎所有视频网站,但那是另一回事-译者)。
微软基于 Windows Live 的 Silverlight 流媒体服务可以让设计和开发者分发富媒体,结合微软的 Expression Studio,开发与设计者们可以创建交互式 Web 程序。
结论
富Internet 应用的技术选择向来存在很多争议,在 Silverlight 和 Flash 中选择,完全要看你的需求,如果你的用户包括Linux 和 Solaris 平台的,Flash 是不二之选,如果希望你的网站可以被索引,Silverlight 更好一些。
另外需要指出的 是,安装了 Silverligth 插件的用户尚在少数,而绝大多数用户的浏览器中都安装了 Flash 插件,另外,SWF,FLA, FLV 几乎成了开发标准格式,而 Silverligth 还是100%私有格式(然而 Silverlight已经是明文了,还谈什么开放不开放 - 译者)。