BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

案例分析:Silverlight在中国人寿的应用

| 作者 吴磊 关注 0 他的粉丝 发布于 2010年6月1日. 估计阅读时间: 13 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

笔者自2003年首次听到Macromedia公司提起RIA(富互联网应用)一词到现在整整7年了。一度被认为是互联网应用趋势的RIA经历了7年之痒,但仍然没有在互联网上得到大规模普及,特别是企业应用就更加少见。做个不恰当的比喻,传统基于Html的应用就像互联网应用中的绿叶一样,而RIA技术由于酷炫的用户体验效果就像是美丽的花朵。现在开心网和腾讯QQ等商业应用中已经运用了RIA技术在其社交网站中得到应用,但这毕竟还是少数,大多数互联网应用特别是企业级应用仍然选择传统高稳定性与高响应能力的Html应用路线,那未来的互联网应用,特别是企业应用能够迎来RIA的春天,绽放出漫山遍野的花朵呢?

(图片摄于笔者家乡--成都)

还记得2000年刚接触Flash开发,发现ActionScript可以通过面向对象的方式实现MIS系统应用,但Macromedia公司对Flash的定位仍然是面向设计人员,在面向开发方面的进展不得不用缓慢来形容,直到2004年在被Adobe公司收购的头一年才真正意义上推出了面向开发者的Flex 1.0版本。笔者虽然对当时FLEX Store应用所振奋,但很快发现其第一个版本在大数据量下低迷的表现。而Flash+AS和FLEX这两条路线,使得开发者很难去抉择。当我还在一边看着LUAR编写的《Flash MX 2004 ActionScript 2.0与RIA应用程序开发》,LUAR本人却在博客上发表了《Flash未来未有来》的文章,作为中国Flash应用开发的领军人物,主动得出"Flash没有帮助开发者开发RIA"的结论。当然现在的Flash经过10年的苦心经营,应用已经非常广泛,特别是在一些Web页面的应用上面。

RIA技术选型

2008年,中国人寿养老保险公司提出开发面向企业客户的养老金精算咨询系统(PACS),但由于养老金咨询中的方案数据采集与精算过程非常复杂,使用传统B/S架构很难实现。由于多年来的RIA开发经历,作为项目经理的我提出在此项目中尝试使用RIA技术进行开发,以到达客户友好性与易用性的目的。微软发布一年的Silverlight引起了项目组的注意,由于企业B/S开发的两大阵营,一个是Java,另一个是.NET平台。针对主流RIA技术笔者进行了对比,当时Java平台的JavaFX仍然处于beta阶段,而在此前笔者已经在一些项目中运用了ExtJS等通过JS实现的类RIA应用,但实际开发效率较低,而且脚本出错概率较高,JS调试相对困难,企业架构要求的稳定性得不到很好的保障。因此,我们将目光集中在了.NET框架下的Silverlight上,经过与微软中国的多次沟通交流,并进行了必要的性能测试。以下是通过实际测试当中的性能对比(对比基准为Flash):

测试一:后台运算性能测试,使用相同的素数查找算法

测试项目

Silverlight

Flash

查找100万以内

单线程:0 .423

双线程: 0.267

1.335

查找1000万以内

单线程 9.833

双线程: 6.144

35.62

在线测试及源代码下载地址:http://www.itwriting.com/primetest

测试二:UI性能测试,使用小球碰撞模拟

测试项目

Silverlight2

Silverlight 3cached

Flash

Flashcached

16个小球

238FPS

116FPS

64FPS

64FPS

32个小球

133FPS

112FPS

54FPS

64FPS

64个小球

62FPS

107FPS

41FPS

64FPS

128个小球

35FPS

99FPS

18FPS

57FPS

在线测试及源代码下载地址:http://bubblemark.com

注:在最新公布的Silverlight 4.0中,官方指出UI线程性能提升了5.5倍,Worker线程处理性能提高870倍。

这里要特别说明一个问题,Silverlight与Flash本身的运行时都在客户端,以前我也在Silverlight发布会中提出Silverlight后台语言支持能力更强,但被很多人误认为是服务器端语言,其实Silverlight与Flash一样可以通过多种网络协议连接不同技术架构的服务端程序,但就客户端的运行时来说,Silverlight是基于.NET的JIT Compiler的,而且有CLR基础类库支持,所以与Flash前端运行时有很大差别。

Silverlight 实现RIA端到端的优势

谈到微软专门为Silverlight包装的Core CLR运行时环境,就不得不说到整个.NET框架的优势,很多人将.NET CLR与 JRE做比较,两者都具有相当强大的基础类库支持,可以说为企业开发提供了基础,而Silverlight享受到了这样的基础类库,但为了减小运行时文件大小,提高用户下载安装体验,微软去除了无用的服务器端基类,保留了主要的客户端类库,下面我将结合Core CLR来说明Silverlight在企业级开发中的优劣势。

下表是笔者总结的在企业级应用开发方面Silverlight的优势:

其中最为重要的一点就是前端Core CLR的支持,大家可以参见MSDN来获得Silverlight 4基础类库的全部资料

本文不会对CoreCLR做过多介绍,结合客户端架构将Silverlight主要基础类库总结如下:

层次

基类库支持程度

XAML表现层

丰富的原生控件(System.Windows.Controls 超过100种控件类)与自定义控件库( System.Windows.Controls. UserControl),支持全局样式修改与资源管理(System.Resources),支持动画(System.Windows.Media.Animation),效果(System.Windows.Media.Effects

客户端控制逻辑层

.Net Framework多种基本类库支持,包括多线程类库(System.Threading),安全类库(System.Security),反射类库(System.Reflection),Linq类库(System.Linq),数据流操作类库(System.IO),XML操作类库

通讯层

包括ADO.Net交互类库(System.Data.Services),WCF交互类库(System.ServiceModel),网络类库(System.Net )等等

而使我们选择Silverlight的另外一点是,结合.NET服务器端技术,可以在一个技术体系下构建端到端的RIA应用,在开发上由于语言的一致性可以共享类库,而同样的IDE环境能够提供方便的前后端一体化调试功能等功能。

通过Silverlight如何加强数据展现能力

要构建企业级应用,就必须要使得数据的展现和编辑更加方便直观,传统基于HTML标签语言的web应用,可以通过input和Table等来实现数据编辑与展现,但无法超出其能力之外,很多第三方的Web应用控件都是利用JS脚本来实现排序,拖拽等效果,但脚本语言毕竟是低效的,并且具有许多外部原因(如浏览器环境等)使得其稳定性不高,而Silverlight原生的控件在数据展现与编辑上面具有良好的表现。以PACS系统中的数据列表为例,使用Silverlight的DataGrid控件,原生支持列排序,列拖拽,也可以通过代码实现过滤,分页。由于我们在一些应用场景中需要对每一条记录都有对应的处理流程和功能按钮,因此使用DataGrid控件中定义行模板(DataGrid.RowDetailsTemplate)就可以实现自定义行样式的效果。而在< DataTemplate />中你可以加入任何XAML元素,使得Silverlight应用可以简单快速的实现以前难于实现的效果。

当然除了数据列表的展现方式,Silverlight提供更多的图形化展现方式,比如原生的各种统计图表,以下是Silverlight的Chart控件应用,在拖动各种参数时,图表将以动画形式变换,而不需要写任何代码。

Silverlight Do It in Naturally

除数据展示以外,在传统WEB应用中,可能会遇到更多的数据录入上的限制,比如一种分段设置参数的应用场景,当我们要输入任意年龄段的对应参数时,传统Web应用没有好的解决方案,可能只会通过下面的方式来进行数据录入:

但如果使用Silverlight自定义控件就可以实现如下更加人性化的设计:

通过点击就可以简单实现在分段的中间插入分段,拖拽就能删除分段,这样的设计符合"do it naturally"用户体验设计原则。而且Silverlight"一切皆为用户控件"的思路,使得开发者可以很简单的开发一个用户控件,而且这些用户控件可以被整个项目充分复用。

"体验先行"的开发流程

Silverlight基于"体验先行"的设计,颠覆了传统业务需求模式,改变传统开发流程,是开发团队可以选择以界面而非功能为起点的开发模式。在PACS项目需求分析中,我们没有采用需求规格说明书面向功能的阐述方法,因为业务与IT的认识隔阂往往会导致项目失败。在Silverlight设计工具Blend中包含了原型开发工具SketchFlow,通过简单的原型控件拖拽就可以快速开发系统原型,使得业务部门迅速理解界面与逻辑关系,避免了业务与IT在最终交付物认识上的差异。以下是PACS在需求分析过程中的原型与最终系统截图对比:

Silverlight在PACS开发中带来了开发过程的革命,经过最终评估,采用快速原型的方式大大减少了需求变更,确保了业务满意度。

展望未来

展望Silverlight技术未来发展,在刚刚结束MIX10大会上,微软已经将Silverlight定位为未来Windows Mobile的主要开发技术,加之以前在跨浏览器,跨平台的策略,实际上已经实现"手机、PC、电视"三屏合一,可以很清晰地看到微软有使用Silverlight实现客户端应用大统一,从而全面收复Web应用失地的趋势。因此,未来微软肯定还会不断加大此项技术的认知度,而Adobe公司不会放弃通过占有率全面反击的机会。这也是我们作为企业开发者希望看到的竞争态势,那么RIA在经历7年之痒后,春天是否真的要来了,我们拭目以待!

(免责申明:本文仅代表作者个人观点)


作者简介:吴磊,就职于中国人寿,曾获得系统分析师、PMP、MCSE等认证。2003 年毕业之后就职于中国人寿,一直从事开发工作,担任过软件开发人员、软件设计师、项目经理、软件架构师。

此文章被收录在《架构师》(5月刊)

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

无语 by Cai John

这样的文章都上头条,InfoQ堕落了

Re: 无语 by Lien taicomjp

不錯阿,有數據分析

Re: 无语 by 霍 泰稳

感谢Jesse的批评,能否再多给一些具体的建议,比如本文的不足点在什么地方?这样我们在以后的约稿过程中就有更多的参考依据,谢谢。

Re: 无语 by Chane Michael

第一,最近微软在各大技术网站、论坛的软文非常多。而且,这篇文章有非常明显的软文嫌疑。
第二,关于第一部分,RIA技术选型那两个测试,IMHO,简直bullshit。这两个performance测试,和“中国人寿”的主题基本上没有关系。我不是flash的粉丝,也坚决主张能用html+css+js替换flash的就替换掉。但是大量的运算显然不应当是UI应该负责的事情。
第三,我也不得不承认,silverlight从纯技术角度,比flash强大很多。

Re: 无语 by 霍 泰稳

第一点我不认同,不能因为微软最近在其他网站上发布了软文,就能推理出这个文章也是软文,也不能推理出任何和厂商技术有关的内容都是该厂商的软文。如果是这个标准的话,我们将所有和厂商有关的内容都拿掉,比如.NET是和微软相关的,Java是和Sun、Oracle相关的,SOA是和IBM相关的,我不清楚如何再去介绍这些技术和产品。

这个文章的出发点是Silverlight在中国人寿得到比较好的应用,我们邀请其技术负责人和大家分享这一过程中的心得,可能有些地方写的不是很深入,但据此就认为这也是软文,有些不妥。另外两个问题我去邀请作者吴磊,看他是否有时间来回答一下,谢谢。

Re: 无语 by 于 申

且不论SL和FL真正如何(各有所爱可以接受),这篇文章放出去做广告倒是挺合适的……标题和内容的不统一注定了其“枪文”帽子怎么都摘不掉了。

Re: 无语 by 霍 泰稳

那就放在这儿让大家公审吧,对我们的编辑工作也是一个促进,欢迎大家提出更多建议,比如自己心目中的好文是什么样子的,不欢迎什么的内容等等,我们洗耳恭听 :)

Re: 无语 by 张 鹏

客观的讲,这篇文章是讲了使用SL后的变化,但主要侧重了界面的变化。众所周知的,SL的界面交互确实强于纯粹HTML+JS+CSS的方式,且更便于开发。但为什么不说说使用SL后对企业IT开发过程的改变或者对架构设计的改变呢?既然是案例分析,那能否将的更深入些呢?

Re: 无语 by 吴 磊

第一,首先申明我写本篇文章绝非软文,我最近也正在撰写《Silverlight企业开发案例实录》一书,此次鉴于篇幅所限,对我公司案例介绍较少,对Silverlight选型与相关技术比较相对偏多,以至于感觉与题目不符。其实我接触RIA开发也只有7年时间,在FLASH方面只做过10余个网站应用,使用FLEX只是开发内部使用的资产管理系统,可能还不足以有更深的认识,欢迎大家多指正批评。
第二,在Silverlight选型方面我们确实做过较长时间(2008年9月-2009年3月)的实验性研究,我们主要关注客户端UI线程与Worker线程的能力,我希望你能理解RIA客户端的Worker线程处理能力对于缓解服务器端计算压力的优势与重大意义。而我们案例中正是将“用户体验”的年金试算的计算从服务器端移植到客户端获得了理想效果,毕竟不是所有的计算都要求回调至服务器端来完成,这样开销会很大。
第三,其实在文章中我也说了引起竞争是好事,最近Adobe公司明显比以前发版速度要快,而且加入非常多面向开发者的功能,希望不要是一家独大,这对于技术发展并不是一件好事。

PS:在QCon2010上面,我也讲了很多关于Silverlight企业开发中更加细节的过程,包括面向用户体验的需求分析过程和面向数据操作而非界面操作的前端架构等等,如果有时间我会针对一两个专题进行介绍。

Re: 无语 by Chane Michael

首先,如我上面所讲,silverlight对于flash的优势是显而易见的。但是,整篇文章:一,文不对题;二,整个行文类似广告。

=================================
以下和上面无关。

关于线程方面,确实对于很有助益。将部分计算放入客户端也是正确的。但是,从pacs.clpc.com.cn/pacs/ 的试用情况来看,我只有3条数据:

序号 编号 性别 学历 姓名 年龄 工资
1 1 男 大学 张三 20 3000
2 2 男 大学 李四 30 3800
3 3 男 大学 王五 40 5100

使用方案T20091211005,计算时,仍然需要5-10秒钟,不知何故

Re: 无语 by Chane Michael

另外,就整个应用来讲,是不是可以在用户上传数据或者方案之后,就对相关内容进行一次性计算,并静态化,这样岂不是效率更高?我现在不修改数据、方案,每次还得等上10秒钟

Re: 无语 by 吴 磊

首先,非常感谢你使用我们的系统,我说的计算前置是登陆界面中的“用户体验入口”中的模拟测算功能,你可以尝试一下。而您使用的内部年金测算功能是服务器端计算的,因为涉及到非常复杂的逻辑,因此放在服务器端进行,而5-10秒时间是正常的,因为我们的数据库服务器与DMZ区应用服务器是分离的,一个在北京,一个在上海,因此比较慢一点。我们进行了测算压力测试,在不考虑网络开销的情况下,测算10人耗时4.3秒,100人 6.2秒,1000人 8.4秒,10000人 19.7秒,10万人 50.2秒,100万人 162秒。

PS:由于数据中心切换,目前线路出口只有1M,不久后我们将在北京部署DMZ区,将会把带宽出口扩充到8M。

Re: 无语 by 吴 磊

还是谢谢你的建议,可能是我们的菜单够醒目,其实在“我的测算”-“结果展现”中可以看到静态化的结果,下一个版本一定改进。

Re: 无语 by Chane Michael

你说的我一开始就看到了。我的意思是,无论客户怎么操作,只要数据和规则(方案)不变,就没有必要重复计算。

GOOD by wei jason

此文很好~~

Re: 无语 by Feng Terry

这样的文章都上头条,InfoQ堕落了

理由呢?

怎么有人为了争论而去争论! by Wang Lei

怎么有人为了争论而去争论!

Re: 怎么有人为了争论而去争论! by lee xiao

第一、首先感谢先行者的勇气,他们为我们拓展的视野,探索了一条可行的道路。
第二、对新技术的应用看法,我们期望得到不抱偏见的真实感受,不管用过什么做过什么,大家都从中获得新的体验和观点。
第三、“粉丝”用在IT领域,尤其是管理信息系统中是不现实的,我们的客户需要什么,我们都要好好为他们着想,毕竟是客户在用真金白银换得想要的结果。
第四、我们不光想知道这个技术如何,我们更想知道对它探索的过程,摸索的方法,毕竟研究的方式方法最值得分享。

Re: 无语 by huang zheng

人寿的那个网站看过,只首页应用的SilverLight,而且做得还不怎么样.

Re: 无语 by 吴 磊

这个应用是全站Silverlight应用,我不知道你是指的哪个网站,您可以通过www.chinalife.com.cn/,右下角的养老金咨询系统进入。

Silverlight后来居上 by Teng Steel

依靠.NET CLR和VS.NET的强大,Silverlight大有后来居上之势。
期待Silverlight5.0中能提供一个更好的打印解决方案

悲剧的访问 by 幻想 最终

分析的很不错,但仅是找一些Silverlight的强项与Flash弱点来比,试问怎么能比不过,我刚也去访问了下那个人兽的网站,结果居然出现:“X正确运行本站程序需要Silverlight3.0或更高版本”的提示,那么我就想到了:

1.不知Silverlight 的普及率是否有Flash
2.我没有进去看到具体的一些UI界面,但我想问Silverligh做出的东西在UI方面的展示如何,尤图像在适量图方面的处理,2D 3D动画效果上与Flash比谁更有优势

java做服务器端 by ma prance

请问有经验的开发者,如果使用java做服务器端,仅界面使用SL,是否有很大障碍?我特别希望能做个很强大的客户端dataGrid,但是服务器切换为.net的可能性不高

文虽不好但主题观点基本可以 by Qiang Mr

本人在项目中使用的Silverlight进行应用开发,历时1年半,与美国同类的产品比较,UI呈现速度成为较明显的优势之一,开发效率也还不错。
不过大家在使用Silverlight进行开发前,先要做好思想准备:强制的异步模式会给你的界面开发带来很大的额外负担,开发思路跟通常的直观的思想相比较要多转一些弯。特别是必须等待通讯完成才能继续进行处理的应用场合中你必须要处理界面的各个操作按钮的状态(或覆盖一层不允许操作的层)等等。没有做好这些准备的话,你的项目开发初期会碰到很大的障碍的,也许代码会弄得很混乱,不利于后续的维护处理。

Re: java做服务器端 by 吴 磊

Java做服务器端,如果使用标准的WebServices肯定是没有问题的,现在我们的另一个基于Silverlight项目已经使用J2EE作为服务器端程序,SL作为展现层。

每天的第一件事就是打开网站等他慢长的首次加载。这是这类应用的致命弱点 by unreal 虚幻

每天的第一件事就是打开网站等他慢长的首次加载。这是这类应用的致命弱点

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

26 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT