写点什么

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

评论

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

不要再问我 In,Exists 走不走索引了

做梦都在改BUG

Go Slice 扩容的这些坑你踩过吗?

王中阳Go

Go golang 高效工作 学习方法 面试题

阿里巴巴灵魂一问:说说触发HashMap死循环根因

Java你猿哥

Java jdk 后端 ssm

轻松搞定面试拿offer的Java面试宝典(全彩图文版)24个Java技术栈

Java你猿哥

Java 面试 ssm 面经 java技术栈

建木v2.7.0发布

Jianmu

node.js maven 缓存 CI/CD 流水线

线上sql执行慢,分享3个优化案例

采菊东篱下

MySQL

GO语言集成开发: GoLand 2022 中文激活版

真大的脸盆

Mac 代码开发 Mac 软件 代码编辑 代码编辑工具

如何基于 Apache Doris 与 Apache Flink 快速构建极速易用的实时数仓

SelectDB

flink 数据湖 实时数仓 Doris 数据库、

【IT小知识】扩容是什么意思?扩容的近义词有哪些?

行云管家

扩容 IT运维

建木缓存—提升构建速度,让你不加班!

Jianmu

maven 缓存 持续集成 CI/CD 流水线

GPT-4:不open的OpenAI,终于不再编造事实

鼎道智联

openai ChatGPT4

硬核!腾讯大佬最新手打的Spring Boot笔记,从原理到实战再到源码

Java你猿哥

Java Spring Boot 后端 面经

2023金三银四最新Java面试题大全(整理版)1000+面试题附答案详解

架构师之道

程序员 java面试

给跪了!阿里P7技术专家进阶必备,架构进阶宝典

做梦都在改BUG

Java 进阶 架构师

Java体系最强干货分享—挑战40天准备Java面试,最快拿到offer!

Java你猿哥

Java 后端 ssm 面经 春招

分析 | NFTScan NFT API 在加密钱包开发中的应用

NFT Research

API NFT

中小企业运维安全审计用什么软件好?有推荐吗?

行云管家

信息安全 堡垒机 运维审计

美团二面特点:喜欢写一个 SQL 语句,然后问你加了哪些锁!

Java你猿哥

Java 数据库 sql ssm InnoDB存储引擎

想稳中求进?字节大佬的硬核学习神器《图解Java并发编程》看了吗

Java你猿哥

Java 面试 Java并发 ssm 面经

瓴羊Quick BI作为自定义数据门户,在企业的有效管理中发挥巨大作用

流量猫猫头

终于扒完国内算法第一人10年经验总结的数据结构与算法详解文档

程序知音

Java 算法 编程语言 数据结构与算法 后端技术

币安欧意交易所合约跟单平台软件开发详情(api对接)

开发微hkkf5566

StyleGAN 生成 AI 虚拟人脸,再也不怕侵犯肖像权

极客飞兔

人工智能 AI 图像处理 StyleGAN 人脸生成

Apache Doris 1.2.3 Release 版本正式发布

SelectDB

数据仓库 数据湖 Doris 数据湖Catalog catalog

见技术大佬,领惊喜好礼!快来领取数据库峰会邀请函!

InfoQ写作社区官方

数据库 云原生 阿里 热门活动 阿里云瑶池数据库峰会

爱了!阿里P8纯手码出489页SQL优化手册,附笔记源码

做梦都在改BUG

Java 数据库 sql 面试

EMQ&南洋万邦云边一体化方案:激活数据潜力,打造智慧工业园区

EMQ映云科技

物联网 IoT 工业互联网 智能制造 企业号 3 月 PK 榜

TechBits | TCP 使用 WireShark 进行抓包

Java你猿哥

Java 后端 ssm

京东三面:说说synchronized和volatile的区别

Java你猿哥

Java 面试 ssm 面经 Java多线程

3月27日“文心一言云服务”系列产品将发布 已有21家企业签约

Geek_2d6073

Silverlight 之轻_Java_吴磊_InfoQ精选文章