tempad
ReadyGo!技术成就梦想 >>Ajax教程 >> 从用户体验与编程模型方面看AJAX与B/S

从用户体验与编程模型方面看AJAX与B/S

ReadyGo!技术成就梦想 网络搜索 efish 2008-2-24 2:52:22

1 B/S为何难于提供好的用户交互体验?

这里头的最大问题有几个:


(1)无状态的HTTP协议

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


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


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


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


AJAX使用以下这种的方法来“摸拟”出模式窗体:将主窗体与对话框“合二为一”,对话框在HTML中就是一个div元素,平时是隐藏的,需要时再显示它。微软的AJAX Control Toolkit中甚至为这一功能设计了一个控件。诸如此类的小伎俩,在B/S开发中不胜枚举。


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


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


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


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


(3)尴尬的Web客户端编程语言——JavaScript

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


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


让我们来看看JavaScript的两大硬伤。


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


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


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


这样看来,JavaScript兼具面向对象,结构化,非结构化三种编程方式的特点,但却弄得不伦不类,没有一个清晰而统一的编程模型,难于写出结构清晰易于维护的代码,反而带来了许多混乱。


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


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


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


2 希望之星——AJAX

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


(1)对JavaScript语言的扩充:

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


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

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


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

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


对于JavaScript而言,别说SOA,能实现CBD都很困难。


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


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


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


(4)增强的服务器端能力

为了增强浏览器端代码的能力,必须通过服务器端予以配合。AJAX本身就基于Browser与Web S

    

[1]  [2]  [3]  [4]  [5]  上一页  下一页
责任编辑: efish 参与评论 查找更多:
相关文章
AJAX将成为移动Web2.0时代首选开发平台! AJAX将成为移动Web2.0时代首选开发平台!
ajax实现垮域访问初探 ajax实现垮域访问初探
如何在jsp中使用 jquery 的 ajax 功能 如何在jsp中使用 jquery 的 ajax 功能
在Ajax 应用程序中实现数据之间交换 在Ajax 应用程序中实现数据之间交换
ajax代理程序自动判断字符编码 ajax代理程序自动判断字符编码
XMLHTTPRequest的属性和方法简介 XMLHTTPRequest的属性和方法简介
在ajax开发中集成数据库技术 在ajax开发中集成数据库技术
从两方面看AJAX与B/S 从两方面看AJAX与B/S
Mashups+AJAX打造全新Web开发 Mashups+AJAX打造全新Web开发
用AJAX编写用户注册时的应用实例 用AJAX编写用户注册时的应用实例
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn

分类导航
ReadyGo!技术成就梦想