HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

Silverlight 之轻

  • 2010-12-29
  • 本文字数:3474 字

    阅读完需:约 11 分钟

【编者按】在企业应用的前端开发中,Ajax、Flash 和 Silverlight 争奇斗艳,各有千秋。这次 InfoQ 中文站有幸邀请到来自中国人寿的 Silverlight 专家吴磊先生,为读者分享他的 Silverlight 在企业应用开发中的丰富经验。

就在笔者写下本文的当天,第二届 Silverlight Firestarter 发布会在美国召开,微软企业副总裁 Scott Guthrie 发布了 Silverlight 5 的一系列新特性,并宣布 Silverlight 5 将注重丰富的媒体体验与企业应用开发两大方面的改进。其中针对媒体方面的改进包括 GPU 硬解码、H.264 等 5 项功能,而针对企业应用方面的改进包括 64 位操作系统支持、IE 9 硬件加速、向量打印、文本清晰度、调用非托管代码等 30 多项功能,可以看出 Silverlight 已经逐渐将其未来重心转向企业级应用方面(一直以来,笔者都认为 Silverlight 的强项应该是企业应用)。

Silverlight 作为微软“三屏一云”战略中展现层的重要技术,越来越引起企业开发者的注意。新浪财经、腾讯、淘宝、口碑网等互联网企业已经尝试使用 Silverlight 开发交互性较强的商业应用,而一贯谨慎保守的大型金融公司陆续开始使用 Silverlight 来提高企业应用的用户体验,比如中国人寿(网上服务应用)、中国人保(商务智能应用)已经有相关应用,而像花旗银行、工商银行这样的大型银行也在尝试使用 Silverlight 来实现未来网上银行一些功能。

为什么 Silverlight 在推出短短三年左右时间内就能触动企业开发者呢?原因很简单,Silverlight 具有良好的后台语言框架支持,这就是基于.Net 高级语言的精简运行环境。具体而言原因有三:

  1. Silverlight 之轻,即较之 WPF、Java Swing、Delphi 等 C\S 架构有更加轻量的运行环境与零维护的特点:使用轻量的 CLR Core 运行时环境,不依赖于客户端环境(无须安装体积庞大的.Net Framework,这一点太棒了)。
  2. Silverlight 之重,即较之 Html+JavaScript 等 B/S 架构有更优越的客户端弹性:使用 C#高级语言代替 JavaScript 来实现强大的客户端计算能力、支持多线程,继承了 WPF 丰富的样式、控件、特效与动画,更可控的浏览器适应性,更安全的沙箱模式,客户端嵌入式数据库等。
  3. Silverlight 之美,即较之传统应用有更友好的交互性,更酷的效果。支持完全面向用户体验的开发过程,其快速原型工具使需求与交付物更为明确,用户体验驱动开发,设计与编码分离。

在本文中,笔者要着重强调的是“Silverlight 之轻!”, Silverlight 是企业应用展现层的轻量级解决方案,从本文开始,笔者将采用连载的方式与大家一起探讨 Silverlight 在企业级应用解决方案与特性。

现在越来越多的企业已经开始考虑将原有“竖井状”的 C/S 与 B/S 架构通过 SOA 等理念进行重构与集成,譬如建立以客户、产品、合同为中心的主数据管理平台(MDM),采用数据即服务的方式对逻辑层提供服务,使用企业服务总线(ESB)对这些服务进行消息路由、转换、监控及生命期管理,通过业务流程管理平台(BPM)混编服务实现业务流程自动化,通过业务规则管理平台(BRM)实现对业务逻辑自动化,最后这些应用层服务形成了企业应用的服务器端处理逻辑。而展现层就是企业应用中实现人机交互的最后一步,即信息的输入与展现。现在的企业应用解决方案中基于窗体的 C/S 与基于浏览器的 B/S 架构几乎构成了企业应用的全部,但两者都有其优缺点,C/S 架构在客户端的处理能力与交互性较强,但维护性极差;相反,B/S 架构在客户端的维护性极高,但对信息的处理能力、交互性、跨浏览器一致性方面都有不足。正是如此,相对 C/S 架构更为轻型的 Silverlight 技术就成为了未来高度集成化的企业应用中理想的展现层的候选方案。传统的 C/S 架构,无论是 VC++、Delphi、Java 的 Swing、还是.Net 的 WinForm、WPF 都需要安装体积笨重的运行时环境,即使客户端程序永远不会使用运行环境中的特殊组件,但使用者也只能被动接受这些组件占用计算机资源。而 Silverlight 有着更为轻便的运行式环境(Silverlight3 的运行时环境 4.3M,Silverlight4 为 6M),在如此小的运行环境下面有着 B/S 无法比拟的高级语言支持,也就是说 Silverlight 具有一颗.Net 的心脏—CoreCLR。

CoreCLR 简单来说就是 CLR for Silverlight,是专门为 Silverlight 量身打造的轻型 CLR,用来执行 Silverlight 代码。Silverlight 基于 C#高级语言,使用同样的托管机制与 MSIL 中间语言,CoreCLR 自备编译环境、内存管理器,不依赖于外部环境。打造这个轻型“心脏”的过程并不容易,对于轻型的 RIA 框架来说 Silverlight 运行时环境要考虑两大问题:大小与兼容性。

大小就是运行时环境的大小,从用户的角度来看,下载必须非常小。这就要求将功能集减至最少,目前 Silverlight4 运行时环境大小为 6M,CoreCLR 中的 DLL 文件在 CLR 和 WPF 的类库中几乎都能找到,只不过大大裁剪了尺寸。这其中就包括对基类库(BCL)的消减,.Net BCL 中的很多功能在 Web 客户端上都没有任何意义,例如:由于 Silverlight 不支持 CAS,因此大部分 System.Security 都不是必要的,System.Console 等许多桌面类在 Web 中也没有任何意义。因此,CoreCLR 删减了大量服务器端类库(如 ADO.NET),去除非泛型集合类(如 ArrayList,完全可以通过泛型集合类代替),同时将复杂的桌面类也一并去除(如 PLINQ 和一些动态类),但保留了.NET Compact Framework 和 Silverlight 间的兼容性。

对于兼容性而言,从编程人员的角度来看,针对 CLR 的编码应该始终相同。因此,Silverlight 堆栈底部的各个组件使用了与桌面 CLR 相同的代码,执行引擎和虚拟机都必须相同,这部件包括类型系统、元数据、垃圾回收器 (GC)、JIT 编译器、线程池以及运行时引擎的其他核心部件。但为了适应 Web 应用程序,CoreCLR 进行了一些更改,如富 Internet 应用程序通常简单且运行时间短,JIT 编译器主要侧重于减少启动时间,而非执行更复杂的优化操作,同样,服务器垃圾回收模式可以对使用相似分配模式的多个工作线程进行优化,而对 Web 托管应用程序则行不通,因此,Silverlight 只包含针对交互式应用程序进行优化的标准工作站 GC。

现在的.NET Framework 里有一万个类,十万个方法,但 CoreCLR 中减少到了 46 个命名空间下不超过一千个类。

C#之父(同时也是 Turbo Pascal 与 Delphi 之父)Anders Hejlsberg 认为未来编程语言的发展趋势及未来方向应该朝着框架与工具发展。笔者认为未来的语言发展方向不是朝着大而全的运行时框架方向发展,而是朝着“轻框架、重工具组件”的方向发展。当我们使用 Visual Studio 开发应用程序时,我们首先选择的是“语言”,然后是“运行时框架”,再引入我们需要的“工具组件”。而精干的“运行时框架”与丰富的可选“工具组件”将为企业应用提供更大的弹性、减轻程序大小、优化响应性能。

事实上,目前很多金融企业的核心应用已经在朝着“去客户化”、“去产品化”的小核心方向发展,“小核心”+“大外围”使企业内部核心具有更加持久的生命力、更加灵活的扩展性和更快的反应能力。而企业应用展现层也越来越青睐于使用小而灵活的运行时环境,开发者完全可以根据实际需求挑选合适的工具组件,提供更富弹性的展现层应用。Silverlight 的未来应该更加关注适用性,而不应该过度考虑基本功能的强大,否则将发展成为另一个 WPF,而失去自己的方向。Silverlight4 将 Silverlight3 的身躯加大了 1.7M,加入了一些诸如集合接口 ISet、延迟初始化类 Lazy、元组对象工厂类 Tuple 等复杂类型,加重了 Silverlight 内核。因此,在 Silverlight5 的 Wish List 中,笔者强烈要求 Silverlight5 关注解决跨设备的问题,而不要过度考虑加重基础类库的强大功能,加重 Silverlight 的包袱,使原本轻便的 Silverlight CoreCLR 变得更加臃肿,无法起飞。

“对于未来,希望 Silverlight 仍能轻舞飞扬!”

注:部分内容取材于笔者即将发布的新书《- 企业级 RIA 应用与 Silverlight 开发全流程实战》,敬请关注。

关于作者

吴磊,中国人寿 IT 高级技术主管、高级工程师,拥有 7 年企业级应用开发经验,负责过多个业务系统的开发工作。曾获得系统分析师、 PMP 等认证,2003 年开始接触 RIA 技术,并不遗余力的在企业应用中推广 RIA 技术, 2008 年带领团队成功研发了国内首个 Silverlight 企业级应用—中国人寿养老金咨询系统 (PACS),该项目先后在 Silverlight3 发布会、Teched09 技术大会、QCON2010 全球企业开发大会上作为成功案例进行展示。


感谢张凯峰对本文的策划及审校。

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

2010-12-29 00:004142

评论

发布
暂无评论
发现更多内容

Partisia Blockchain 基于领先的MPC方案,赋能医疗领域

BlockChain先知

元宇宙方面

dappweb

ao 元宇宙

GitHub高赞!速通Python编程基础手册,被玩出花了!

我再BUG界嘎嘎乱杀

Python 编程 入门 开发语言 零基础

区块链与游戏:颠覆传统的数字娱乐新纪元

dappweb

区块链 ao

鸿蒙先锋共筑星河丨HarmonyOS NEXT走进医疗行业,革新运动康复体验

最新动态

元宇宙与区域链经济

dappweb

ao 元宇宙

OpenAI最新收购实时分析数据库Rockset释放出什么信号?

AI数据云Relyt

openai 数据基础设施 LLM 实时全索引数据仓库 DataINfra

大家都爱用!不可错过的 AI API 接口

幂简集成

AI API

元宇宙与平台层

dappweb

ao 元宇宙

华为云618营销季云上云下一体化安全解决方案,打造高效、安全管理平台

YG科技

元宇宙如何变现

dappweb

ao 元宇宙

云原生技术领域的探索与实践

快乐非自愿限量之名

云原生

如何加速AI原生应用进程?华为云开天aPaaS提出新范式

Alter

元宇宙与计算层

dappweb

ao 元宇宙

元宇宙的应用领域

dappweb

ao 元宇宙

OpenAI最新收购实时分析数据库Rockset释放出什么信号?

AI数据云Relyt

openai LLM 实时全索引数据仓库 实时分析 DataINfra

鸿蒙先锋共筑星河 | 薪火相传,为鸿蒙原生应用的开发凝聚未来动力

最新动态

通过ETLCloud实现SQL Server数据同步至Oracle

RestCloud

oracle sql ETL SqlServer ETLCloud

详解python pickle中的反序列化漏洞

我再BUG界嘎嘎乱杀

Python 序列化 反序列化

不容错过的经典!Python核心编程(第3版)教你用实例学Python!

我再BUG界嘎嘎乱杀

Python 编程 软件开发 入门 零基础

元宇宙与远程会议

dappweb

ao 元宇宙

让学习更“元宇宙

dappweb

ao 元宇宙

鸿蒙先锋共筑星河 | “南方基金App”全面拥抱HarmonyOS NEXT

最新动态

一文读懂Partisia Blockchain的MPC方案,为医疗领域发展赋能

加密眼界

一文读懂Partisia Blockchain的MPC方案,为医疗领域发展赋能

大瞿科技

轻松两步,借助向量数据库 VectorDB 与千帆 Appbuilder 构建个性化本地问答知识库

Baidu AICLOUD

向量数据库 rag

元宇宙与应用层

dappweb

ao 元宇宙

虚拟现实与区块链:融合创新,开启全新数字世界

dappweb

区块链 ao

鸿蒙先锋共筑星河 |科技浪潮中的教育革新,看南京大学教授的HarmonyOS教学之路

最新动态

Partisia Blockchain 基于领先的MPC方案,为医疗领域发展赋能

石头财经

加密技术与区块链:守护数字世界的双重保障

dappweb

区块链 ao

Silverlight 之轻_Java_吴磊_InfoQ精选文章