【IT168 专稿】一年多以前,微软的Silverlight粉墨登场,被业界人士称为“Flash杀手”,其竞争对手包括Adobe的Flash和Flex,以及其它几种富互联网应用和AJAX框架。
Silverlight 1.0的多媒体功能和WPF用户界面,给人留下深刻印象。随后微软推出了Silverlight 1.1测试版,增加了对编译.Net语言的支持,以及增加了对更多.Net API的支持。
当Silverlight 2推出时,人们发现,对微软来说,Silverlight 1.1是一个如此重要的更新版本。正如我们现在所看到的,Silverlight 2支持所有.Net语言,其中包括诸如IronPython和IronRuby之类的动态语言,它还包含大量的.Net基类,包括诸如LINQ(集成语言查询)之类的新功能。
除了的一系列丰富的管理功能之外,它还通过API实现了全面的网络功能支持,其中包括对REST、SOAP、RSS和HTTP等的支持;它还包含了本地数据缓存和存储支持;以及开始支持高清视频。H.264视频和AAC(高级音频编码)音频支持将在Silverlight 3中实现。
在今年8月份的北京2008奥运会上,Silverlight无疑是最出风头的技术,得到了很好的检验并受到了不错的评价。当然也有很多人声称它对某些硬件和操作系统不够兼容,但是这并不令人意外。在微软看来,至少,Silverlight互联网视频流技术已经被美国国家广播公司(NBC)、中国中央电视台和其它10个国家的电视传媒机构所采用,这本身就是一个巨大的成功。最近,Blockbusterye也正在他们的MovieLink应用中把Flash换成Silverlight 2。
功能和控件
鉴于Silverlight 2的强大语言支持和类库,以及非常高的运行时(runtime)性能,它最终可以被人们应用于各个领域的RIA开发,而不仅仅局限于视频流应用。
目前,它可能还缺少某些应用所需要的一些用户界面控件功能,在标准的Silverlight控件工具箱中只有28个控件,另外在Silverlight工具箱中还有12个,不过在未来数月中微软计划将控件的数量增加到100个以上。另外,制作新的Silverlight控件并不困难,许多第三方独立软件厂商已经制作出自己的控件,不过,如果你不多点耐心的话,你会发现微软最终会提供你所需要的任何控件。
在进行跨域访问时会面临安全问题,这是任何基于浏览器的应用都存在的一个潜在难题,不管它是使用的Silverlight插件还是使用的Flash插件。Silverlight有自己的跨域安全机制,通过一个清晰明了的文件设置进行控制,默认设置下就具有最安全的设置。
尽管有这种安全机制的保护,我依然在网上看到很多批评的声音,认为Silverlight本地数据存储非常容易受到跨域攻击,我没有去对此进行考证,不过我想指出的一点是,批评者们也同样指出,Flash的本地对象同样无法防御类似的攻击,因此这并非Silverlight自身所独有的问题。
开发和设计
我使用了Visual Studio 2008 SP1和Expression Blend 2 SP1尝试了Silverlight 2开发,开发工具很易上手,使用其开发也非常简单,当然这或许是因为我已经非常熟悉Visual Studio、C#、.NET框架和XAML。因此我相信,其它熟悉.Net语言和XML开发的朋友,也应该可以很轻松的学习和开发Silverlight应用。
XAML编程的基本方法就是赋予对象一个x:Name标签,例如:
一旦设定了x:Name属性,程序可以操作这个元素的属性,这一点与JavaScript在DHTML中操作HTML元素在原理上是相同的:
在程序和XAML元素之间通过名称建立起来的这种联系,对于开发团队和设计团队开发Silverlight和WPF应用来说,是非常关键的。只要这个名称没有改变,程序员就可以修改其后端代码文件,设计者也可以修改XAML文件,而不会破坏两者之间的通讯接口。他们甚至可以使用相同的工具。
不过我发现了一个美中不足的地方,虽然我是一个程序员,但也偶尔自己做一些设计工作,我失望的发现,在Visual Studio XAML设计器中,我无法拖拽控件到图形面板上;它的图形面板只能具有预览作用,因此我智能拖拽空间到XAML文本内容中。不过从另一方面来说,在Visual Studio中的XAML编辑功能具有很好的智能感知支持,这个即时预览面板可以让你非常及时的看到页面的外观效果。
Expression Blend为XAML页面提供了一个图形化设计界面,不过它没有提供太多编程功能支持。它肯定会成为多数设计者选择的Silverlight工具。我所希望的更完美情况是,能有一个工具可以同时满足设计者和开发者的需要。不过Visual Studio和Express Blend两者的集成性也非常好,只是它们可能更加专注于提供自身用户对象所需功能。
对比Silverlight和Flash、AJAX
除了Silverlight之外,还有一些其它RIA技术,其中最为大家所熟悉的有AJAX、Adobe Flash和Adobe Flex等,它们之间的区别是非常明显的。AJAX的优势之一是无需安装任何插件,另外目前已经拥有大量的AJAX工具和控件。不过它也有自己的缺点,例如AJAX应用一般依赖于浏览器类型和版本,而且AJAX页面设计工具相对比较简单,同时还有性能问题:多数浏览器的JavaScript解释器运行速度相对较慢。
Flash更专注于设计者而非开发者,而Flex则相反,当然人们可以组合使用这两个工具。尽管多数Flash设计者一般会忠于自己所选择的技术,但是他们可能会发现,Expression Blend可以更好的满足他们的Silverlight开发需要。Flex程序员则会发现,在Visual Studio中编写Silverlight XAML代码文件,与在Flex Builder中使用ActionScript编写MXML具有异曲同工之妙;当然,除非他们在开发.Net应用,否则不会选择更换自己的工具。程序员在很多时候是非常保守的。
根据我个人的对比来看,Silverlight 2要比本文中提到的任何其它RIA技术都强大,具有更强大的功能、更高的计算性能和更快的显示速度。不过,我也曾经看到过与我的结论完全相悖的测试,这可能与测试的内容和方法有关系。在某些硬件上,Silverlight应用的运行速度可能比较慢。另外,XAML支持许多复杂的图形特效,它们需要一个好的图形处理芯片来获得足够的渲染速度。
Flash插件已经被普遍安装在多数计算机上,这一直是其支持者们看好它的一个重要原因。不过,这并不是什么不可改变的事情,现在网络速度已经越来越快,下载并安装Silverlight插件并不是什么麻烦的事情。据有关媒体调查数据显示,尽管Flash的安装率依然在90%以上,但Silverlight在很短时间的安装率也达到了33%以上。
当Silverlight问世之际,很多人称它为Flash杀手,我认为并非如此,原因有二:一是许多单位已经在Flash视频服务器上进行了大量的投资;二是Flash和Flex设计者和开发者们已习惯于使用自己熟悉的工具,因此会继续忠于Adobe。他们不会关心微软是否可以为他们提供一个更好的技术或工具,因为他们不会放弃已经熟悉的工具而去花更多的时间来熟悉另一个新工具。
尽管如此,Silverlight的确具有强大的技术优势和相对更好的性能。它是一个非常值得选择使用的RIA技术,尤其对那些具有.Net开发经验的程序员和XAML使用经验的设计者来说,更是如此。