“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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:004026

评论

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

Python进阶(三十八)利用matplotlib 进行折线图,直方图和饼图的绘制

No Silver Bullet

Python matplotlib 11月月更

【Go电商实战05】结合项目解答使用Go中间件遇到的问题:中间件的概念和应用

王中阳Go

golang 学习方法 中间件 11月月更 电商实战

【Redis】Redis AOF持久化

石臻臻的杂货铺

redis 11月月更

JavaScript刷LeetCode拿offer-js版字典

Geek_07a724

JavaScript LeetCode

挖到宝了!2022阿里大佬手写“精品”Sping Boot学习笔记

小小怪下士

Java 程序员 阿里 springboot

JavaScript刷LeetCode拿offer-二叉树层序遍历篇

Geek_07a724

JavaScript LeetCode

MASA MAUI Plugin (六)集成个推,实现本地消息推送[Android] 篇

MASA技术团队

blazor MASA MAUI Xamarin MASA Blazor

java企业级开发中常见的注入方式

千锋IT教育

一文读懂NodeJs知识体系和原理浅析

coder2028

node.js

Nftea: 世界杯文化、 NFT与 期权的首度碰撞

EOSdreamer111

还在为数据库事务一致性检测而苦恼?让Elle帮帮你,以TDSQL为例我们测测 | DB·洞见#7

腾讯云数据库

数据库 腾讯云 数据一致性 tdsql 腾讯云数据库

直播CDN调度技术关键挑战与架构设计

京东科技开发者

架构 系统架构 直播 CDN加速 CDN技术

前端leetcde算法面试套路之二叉树

js2030code

JavaScript LeetCode

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

亚中医疗——数据驱动预算管理升级,引领业务发展

元年技术洞察

数据驱动

js函数式编程讲解

hellocoder2029

JavaScript

分享一招应对BOM表的检查方法,摆脱被BOM支配的“恐惧”

华秋PCB

检查 PCB PCB设计

大咖说·先临三维|高精度3D视觉技术商业应用与实践

大咖说

科技 高精度3D视觉

Nftea: 世界杯文化、 NFT与 期权的首度碰撞

股市老人

Python进阶(三十七)Windows7使用nginx+apache部署django项目

No Silver Bullet

Python Apache nginx django 11月月更

vue和react的区别有哪些,哪个好

千锋IT教育

java Apache poi 对word doc文件进行读写操作

@下一站

编程 原创 word Java core 11月月更

Redis6.0新特性、剖析线程模型(单线程和多线程)

C++后台开发

redis 多线程 后端开发 单线程 C++开发

Wallys/Introduction of DR9074 series network card/qcn9074/qcn9072/qcn9024/industrial M.2 card

wallysSK

QCN9074 QCN9024 QCN9072

元年科技:在数字化浪潮中,为企业建造一艘“方舟”

元年技术洞察

微服务 云原生 容器化 方舟企业数字化 PaaS 平台

nodejs实现jwt

coder2028

node.js

Python进阶(三十九)使用matplotlib进行绘图分析数据

No Silver Bullet

Python 绘图 matplotlib 11月月更

js异步编程的三种模式

hellocoder2029

JavaScript

js对象和原型、原型链的关系

hellocoder2029

JavaScript

JavaScript刷LeetCode拿offer-树的遍历

js2030code

JavaScript LeetCode

2 分钟,教你用 Serverless 每天给女朋友自动发土味情话

阿里巴巴云原生

阿里云 Serverless 云原生

Silverlight 之轻_Java_吴磊_InfoQ精选文章