带镣铐的舞者:从两方面看AJAX与B/S

 

内容摘要:近来遇到了这样一个应用场景,某企业多年以来一直使用PowerBuilder开发系统,随着公司发展,决定将老信息系统由C/S转为流行B/S架构
  近来遇到了这样一个应用场景,某企业多年以来一直使用PowerBuilder开发系统,随着公司发展,决定将老信息系统由C/S转为流行B/S架构,于是问题出现:原有系统有大量数据录入、精确报表打印等功能,而且用户都已非常习惯这种操作,希望新系统能保留原有系统这种使用方便特性。 字串3

  我一听到这个问题就头痛了,PB有一大堆功能强大控件,要搬到浏览器里,用网页来模拟实现,太困难了。 字串5

  1、B/S为何难于提供用户交互体验? 字串8

  这里头最大问题有几个: 字串9

  (1)无状态HTTP协议

字串6

  Windows窗体间可以通过内存直接交换信息,但作为B/S架构通讯基础协议HTTP是无状态。 字串6

  如果将浏览器看成是客人,Web Server看成是旅馆,在HTTP协议管理之下,会出现这种情况:不管某客人来访多少次,Web Server都将其视为第一次访客。这样一来,客人每次都得带齐身份证件供旅馆工作人员“验明正身”。

字串6

  HTTP协议无状态,导致Web Server“六亲不认”,这固然能增加Web Server吞吐量,却给应用系统开发带来了麻烦。因为应用系统中往往有许多业务处理流程,天生就是信息流转,即原始数据从一端进去,从另一端出来时应该已经过某些处理,怎可想象整个业务流程中信息会流失?于是,在HTTP各请求间共享信息就成了件麻烦事,这就是HTTP请求“状态保持”问题。每个B/S系统都必须解决这个问题。微软想了一些“歪招”,比如充分利用HTML网页中隐藏域,再在Web Server上做些手脚,于是ASP.NET拥有了一套在各个HTTP请求之间维持状态技术:Session,Cookie,ViewState,Profile,Application。

字串2


  然而问题并没有完全解决。比如,C/S系统中常见收集用户输入信息对话框,主窗体与对话框之间有着信息交换(又分为两种:模式和非模式,前者对话框不关掉,主窗体不能被激活),在B/S架构之下,由于浏览器每个请求是独立,要在两个独立浏览器窗口间实现类似于模式对话框这种直接信息交换,我还真不知道该怎样干。

字串9

 


字串7

内容摘要:近来遇到了这样一个应用场景,某企业多年以来一直使用PowerBuilder开发系统,随着公司发展,决定将老信息系统由C/S转为流行B/S架构
  AJAX使用以下这种方法来“摸拟”出模式窗体:将主窗体与对话框“合二为一”,对话框在HTML中就是一个div元素,平时是隐藏,需要时再显示它。微软AJAX Control Toolkit中甚至为这一功能设计了一个控件。诸如此类小伎俩,在B/S开发中不胜枚举。 字串2

  可以看到,许多在C/S轻而易举就可实现功能,在B/S中要实现则大费周章。 字串8

  (2) 特殊运行环境——浏览器

字串6


  B/S系统前端运行环境是浏览器,这就带来了诸多限制,不能干许多事,比如直接访问硬件(例如打印机),也无法充分利用硬件资源。例如,现在新电脑都是双核,你能直接用JavaScript加HTML写出一个多线程程序以充分利用这两颗“奔腾芯”?

字串2

  而C/S系统则直接运行在OS(操作系统)之上,可以调用OS提供所有功能,这种限制就不存在了。

字串7


  (3)尴尬Web客户端编程语言——JavaScript 字串4

  传统C/S程序,可以使用为数众多各种开发语言,尤其是象C ,Java,C#之类主流面向对象语言,功能强大,使用方便,各种开发工具齐备,已非常成熟。

字串9


  与此相反,B/S前端所使用最多编程语言JavaScript,不仅不让人喜欢,甚至让许多程序员“恨之入骨”,将“用JavaScript编程”看成是件苦差事。

字串4

  让我们来看看JavaScript两大硬伤。 字串3

  首先,缺乏清晰而统一编程模型。

字串4

  JavaScript虽然名字中有一个Java,并采用了类似语法,但与真正Java并无关系。唉,她本身是一只丑小鸭,总想着攀上天鹅这门亲,却没想到别人并不买账。 字串8

  JavaScript用到了许多对象,但说它是面向对象吧,又实在难以令人信服(面向对象编程基本单元是类),比如它没有类似于C#等主流面向对象语言关键字class,到处是一个个函数,这就使所有代码难于以类方式清晰界定;同时,它又不是结构化(结构化编程基本单元是函数),因为浏览器在解析HTML文档时,是采用流式解读方式,从而导致一些JavaScript代码被放在函数之外,在解析HTML文档时直接执行,而另一部分放到函数中代码,则多采用事件驱动方式运行,这就带来了复杂程序执行流程,远不如纯结构化编程中统一采用函数调用编程方式简洁。

字串2

 


字串1

内容摘要:近来遇到了这样一个应用场景,某企业多年以来一直使用PowerBuilder开发系统,随着公司发展,决定将老信息系统由C/S转为流行B/S架构
  这样看来,JavaScript兼具面向对象,结构化,非结构化三种编程方式特点,但却弄得不伦不类,没有一个清晰而统一编程模型,难于写出结构清晰易于维护代码,反而带来了许多混乱。 字串7

  其次,JavaScript另一硬伤是它浏览器运行环境。

字串3


  由于历史原因,不同浏览器,甚至同一浏览器不同版本,其编程模型都有或多或少差别,因而不得不写代码检测浏览器类型,比如需要为IE写一套代码,又为FireFox写另一套。这实在是一件麻烦事。

字串4

  上述这些问题,几乎是B/S架构系统“与生俱来”“缺陷”。先天不足后天补,人们想出了许多招数来解决这些问题。AJAX是众人看希望之星。 字串9

  2、希望之星——AJAX

字串9

  这些天来,我系统地了解了一下微软AJAX框架。发现这一框架复杂远远超过我原先估计,微软设计AJAX框架工程师们,将各项Web开发技术潜力发掘得很深,在很大程度上弥补了前面提出问题。 字串2

  (1)对JavaScript语言扩充:

字串4

  微软通过提供封装AJAX Library,增强了JavaScript面向对象特性,可以方便实现继承,定义接口,序列化对象,引发事件,反射类型等功能,虽然比真正面向对象语言(比如Java/C#)还有差距,但能将“丑陋”JavaScript打扮得可以见人,也算是功力不凡。 字串9

  (2)大幅度提升浏览器端代码功能

字串1

  在AJAX Library支持之下,配合增强功能JavaScript,在浏览器本身支持之下,可以在浏览器中写JavaScript脚本,方便地向服务器发出异步请求,实现页面局部刷新,并可以直接调用Web Service。 字串9

  (3)引入基于组件开发(CBD)方式

字串7

  基于组件开发(CBD)早已是面向对象系统主流开发方式,虽然现在SOA(基于服务架构)炒作得热闹非凡,但要达到CBD那样成熟程度,还需要时间。

字串3

 

字串9

内容摘要:近来遇到了这样一个应用场景,某企业多年以来一直使用PowerBuilder开发系统,随着公司发展,决定将老信息系统由C/S转为流行B/S架构
  对于JavaScript而言,别说SOA,能实现CBD都很困难。 字串1

  为了实现CBD,微软给JavaScript“大补特补”,增强了许多特性,基于Microsoft AJAX Library,程序员可以开发三种类型可复用组件:None_Visual Component(不可视组件,相当于面向对象系统中一些提供公用功能类)、Behavior(行为,扩充现有Web控件功能)、Control(拥有可视化界面元素Web控件)。 字串6

  尤其是AJAX Control ToolKit中提供几十个控件,基本上实现了B/S对C/S用户界面大部分特性摸拟,是这一新编程模型应用典范。 字串9

  微软对JavaScript编程模型增强,使软件工程师终于可以用CBD开发方式开发Web客户端代码。我认为,这是一个进步。 字串2

  (4)增强服务器端能力

字串7

  为了增强浏览器端代码能力,必须通过服务器端予以配合。AJAX本身就基于Browser与Web Server相互支持编程模型(Web Server提供数据服务,Browser提供XMLHttpRequest对象可向Web Server发出异步请求,当数据回来时,程序员可以用JavaScript编写代码实现对网页动态局部更新)。

字串7


  通过AJAX Extension,微软增强了服务器端ASP.NET框架功能。并将常用功能外化为简单Web控件,比如AJAX核心控件ScriptManager,用于定义页面可更新区域UpdatePanel,还有用于增强现有ASP.NET控件位于AJAX Control Toolkit中几十个Extender控件(即附加到现有控件上控件,其目是给现有控件扩充新功能)。 字串6

  拥有了这些控件,开发Web前端程序就类似于在VB中设计窗体了。现在不仅仅是可以绘出类似于Windows窗体界面,而且通过利用AJAX异步请求与页面局部刷新技术,在Web服务器配合之下,可以在用户体验上逼进Windows窗体。 字串4

 

字串3

内容摘要:近来遇到了这样一个应用场景,某企业多年以来一直使用PowerBuilder开发系统,随着公司发展,决定将老信息系统由C/S转为流行B/S架构
  不管多少人如何看不起VB,但VB所带来可视化编程普及浪潮,确影响深远,微软推动JavaScript编程走向这一步,也是大势所趋。为了提高Web 开发效率,必须走这一步。 字串1

  然而,需要指出是,不管后天如何“进补”,毕竟“先天不足”,B/S架构要在用户体验这点上超过C/S,还是非常困难。

字串2

  3、未来:B/S与C/S,谁主沉浮

字串4

  由于管理与部署简便性,B/S架构成为当今许多信息系统首选,然而,用户是追求使用体验,大体总结起来,有以下要求:

字串7


  (1)漂亮界面。这点B/S有优势。 字串6

  (2)方便输入。比如许多用户都希望能不用鼠标就可以录入数据,或者是通过简单点击实现数据自动填充,在B/S架构下实现起来比较麻烦,AJAX可以在一定程度上解决这个问题。

字串8


  (3)闪电般速度。对于C/S而言,要实现响应速度快,有许多法子可想,可B/S就不容易了。由于受到浏览器限制,客户端强大硬件资源几乎是被闲置。另外,网络速度是B/S架构瓶颈,除非带宽能有快速增长,否则,WWW就是World Wide Wait。 字串8

  C/S虽然拥有用户体验,但它问题在于开发跨越整个互联网分布式系统困难,而且由于需要安装客户端,系统更新与组件版本管理就成了一个大问题,此外,不象B/S架构中只需考虑服务器端问题,在C/S架构由于多用户同时访问服务器,各组件间调用和依赖关系复杂,在处理多线程访问共享资源,事务处理等方面必须同时考虑客户端与服务器端,吞吐量受到大限制。因此,C/S多建构于局域网内,供企?img alt="" src="http://51dev.com/ads/de.gif" />诓渴褂谩?字串3

  目前基本上是B/S与C/S共存,随着诸如AJAX之类B/S技术广泛应用,B/S不断攻城掠地,占有上风,但不可能将C/S彻底地“打垮”。 字串5

 

字串8

内容摘要:近来遇到了这样一个应用场景,某企业多年以来一直使用PowerBuilder开发系统,随着公司发展,决定将老信息系统由C/S转为流行B/S架构
  比较有意思是:象微软这样大公司,是如何看待B/S与C/S发展前途? 字串4

  我等普通开发者,没有机会直接与微软高层对话,但可以从其公司产品发展路线看出一些端倪:

字串4

  微软似乎并未认为B/S代表着未来技术发展方向,相反,它许多行动,都向着抛弃浏览器方向在走。 字串9

  首先,微软简化了C/S开发与部署问题,推出了Smart Client技术,让C/S客户端程序更新可以无需人工干预,自动进行。 字串4

  其次,微软努力弥补B/S与C/S两者间鸿沟,在设计ASP.NET时,毅然抛弃已取得不错业绩ASP,直接采用类似于VB“可视化控件 事件驱动” 编程方式,甚至将Web 页面也称为“Form”——Web Form。

字串8


  第三,微软可能认为AJAX是一种过渡性质技术。

字串5


  微软在AJAX上迟迟不见动作,直到看到由于Google等公司成功应用AJAX技术提升Web用户体验而导致AJAX迅速窜红时,才行动起来,给ASP.NET加上AJAX扩展,整个过程中显然行动并不积极,投入资源也并不多,这与当年微软与网景公司展开浏览器大战时完全不一样。但从其在VS2008中将AJAX Extension内置为标准配置,并直接集成JavaScript调试功能到IDE中,说明微软还是面对现实,它承认AJAX拥有重要地位与较大发展潜力。 字串9

  其实,我分析微软野心是“一统天下”,抛弃浏览器,彻底统一B/S与C/S。

字串2

  这点在.NET 3.0/3.5中看得很清楚。

字串7

  首先,微软用WCF统一了DCOM,.NET Remoting等主要用于C/S技术,集成了原先位于COM 中许多企业化开发特性,连同主要用于B/S架构Web Service技术,统一地抽象并封装为可复用WCF Service。很明显,微软要将信息系统开发模式由CBD转为SOA(即未来系统是组装Service,而非组装Component)。 字串2

 


字串8

内容摘要:近来遇到了这样一个应用场景,某企业多年以来一直使用PowerBuilder开发系统,随着公司发展,决定将老信息系统由C/S转为流行B/S架构
  其次,微软抛弃了非常成熟Window桌面程序编程模型(Win32 API 消息/事件驱动)引入了一个全新WPF编程框架,其中一个重大革新是符合XML规范XAML(应用程序标记语言)出现。XAML用XML格式纯文本文件来描述应用程序界面。

字串6

  我们可以很容易地将XAML与XHTML进行类比。浏览器解析XHTML代码,生成可视化网页界面,而XAML则由.NET Framework 虚拟机负责解析,在Vista中,由于Vista直接集成.NET Framework 3.0,就可以将Vista看成是一个超级浏览器,由它负责读入XAML生成用户界面,并实现其所有应用程序功能。

字串6


  这样一来,一种新编程模型浮出水面,不管是B/S还是C/S系统,其方式都是统一:读入XAML代码à解析à呈现à接收用户输入à处理数据à显示结果。 字串4

  在这个编程模型中,浏览器成了一个旁观者,不再是客户端应用核心。 字串6

  新编程模型运行平台是全功能OS,而非功能受限浏览器。这个区别是巨大,一个运行于OS之上浏览器,其功能怎能和OS自身相比! 字串7

  现在可以通过按面向对象方式组织起来操作系统API(应用程序编程接口)方便地调用操作系统各种功能,充分利用客户端硬件资源(比如可以很容易地在.NET Framework之上开发多线程程序,“压榨”双核CPU工作能力)。用户界面都用XAML来描述,这就统一了B/S与C/S界面层技术。

字串6


  WPF最适合运行环境是Vista操作系统,它一个功能子集,现在称为Silverlight,被实现为一个浏览器插件,从而让WPF程序也能跑在传统浏览器中。由于Silverlight和Vista本身都可以解析XAML,所以,现在可以用XAML只写一套界面代码,就同时适用于B/S与C/S,并获得相同用户体验。

字串4

字串9


  由于B/S和AJAX存在着一些先天不足,如果将经过AJAX增强功能B/S系统比喻为一个舞者,那么,这其实是一位带着镣铐跳舞舞者,而微软公司想法是,与其不断想法减轻这一镣铐重量,为何不干脆直接抛弃这一镣铐呢? 字串9

  微软推出WPF与WCF,就是这样一个尝试。

  应该来说,微软公司这套发展战略是建立在对现有B/S与C/S各自优缺点分析基础之上而制订,有它科学性,也考虑到了自身商业利益。但这一战略最终实现还有许多困难,因为即使强大如微软,也无法一统江湖。微软对手与微软一样聪明,技术进步同样迅速。
  可以断言,由于信息系统应用延续性,在相当长一段时间内(也许有三五年,也可能有五到十年),B/S与C/S将同时并存,由于B/S许多突出优良特性,在与C/S竞争中将占上风,这个局面不会有大改变。对于AJAX,作为B/S系统一个重量级武器,虽然很有效,但存在不少缺陷,我对于它未来发展,抱有谨慎乐观态度,不过,作为一名Web 开发者,应该去了解并应用这一技术。
  未来格局到底如何,某种技术到底有没有前途,都不是由个人说了算。我想,B/S与C/S之争最终格局,将是多方面因素共同博弈结果。对于个人而言,必须与时俱进,及时调整自己行动和战略,这是当代软件开发者宿命。

本文来自: 我要研发网(http://www.51dev.com) 详细出处参考:http://51dev.com/plus/view.php?aid=9654

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值