Sharping's Technique Claver

Just be a low-level developer !

博客园 首页 新随笔 联系 订阅 管理
  12 Posts :: 0 Stories :: 86 Comments :: 0 Trackbacks
       AJAX在去年确实火爆了,作为Web2.0时代的核心技术,关注度盛况空前,至今仍余音未绝,我一直从事于WinForm、Windows Mobile应用开发,虽然对Web开发略知一二,但从未向学习WinForm开发一样系统的学过Web,最近闲暇之余从头学了学ASP.NET,到现在才真正理解清楚了诸如ViewState之类的Web工作原理,我可以肯定的说,时下的Web开发人员中还有什么都没理解清楚的“高手”,当然ASP.NET并不是今天讨论的话题,我们直接看看Ajax吧,在理解清楚它之后你会发现,它比理解WinForm编程中的线程单元要简单得多,就其技术本身来说并没有什么神秘与复杂性可言,而且其工作机制还不及三次握手的理解难度,我们并不讨论实现的方法,而只对底层工作原理进行剖析,因此读这篇文章并不需要造火箭的技术。

      Ajax(Asynchronous JavaScript and XML)中文意思为异步JavaScript 和XML,或者基于XML的异步JavaScript.它提供了一种局部刷新Web页面的机制,比起传统的整页Load在性能上有了质的飞跃,看看GoogleMap吧,再看看Google输入框的AutoComplete功能,相信你已经对Ajax无限神往了。每一项技术都有其发展的根源,我们追溯一下Ajax的历史,其实这个技术最早在IE5.0中被引入,算算也是几年前的东西了,可惜微软当时并没有挖掘出它的价值,直到Flickr, Backpack和Google在这方面作出了惊人的研究成果。就技术根本来说,Ajax只完成了一个功能,即用客户端代码(JavaScript )发送Http请求,要完成这一特殊的功能并不是我们这些普通开发人员能简单实现的,因为它依赖于浏览器本身,在IE5中,微软引入了一个XmlHttp的ActiveX对象,后来Mozilla, Safari 和其他浏览器纷纷仿效, 提供了XMLHttpRequest类,它支持微软这个ActiveX对象所提供的方法和属性.这个类使得我们用JavaScript发送Http请求成为可能。并且它提供了我们插入响应代码的途径。下面是前面所描述的这个对象执行机制的伪代码:

      request = new XMLHttpRequest();  

request.open('GET', 'http://localHost/xxxx.aspx, true);

request.send(null);

     响应这个请求: 

request.onreadystatechange = function(){
           
           var text = request.ResponseText; //取得响应的字符串

     // 作出响应.....执行一些客户端JavaScript

};

      当然实际代码比起这些代码要复杂得多,但前面说过了,我们并不讨论实现方式,而是探寻其执行原理,可见为Ajax剥下神秘面纱后赤裸裸的展示出来其简单的原理,和C#里的事件响应一样,只不过这个事件是客户端请求而服务端触发罢了,真正的复杂性早已被微软封装到ActiveX对象中了,但是原理的简单并不是说实现的简单,实现起来确实有些难度,但是现在那么多的AJAX框架已经为我们屏蔽了很底层的东东,实现并不在本文所谈论的话题,这里就不详述了。

      任何新技术的引入伴随的都是痛苦的学习,我们必须掌握其实现原理,才能准确,适宜的用好这些新技术,盲目烂用只能弄巧成拙。那么作为开发人员的我们如何应对已经到来的AJAX呢?以下是我个人理解了AJAX后的一些结论(注:本人自知技术造诣浅陋,不对之处请大家原谅):

     理解Ajax解决的问题
     
     
Ajax的出现就是为了改善Web程序用户体验,用户点击页面后的页面刷新延迟问题就是引入Ajax的直接理由,如果我们的程序运用AJAX并没有改善用户体验的话那只是为了Ajax而Ajax,而不是为了用户体验而Ajax。
    
     Ajax的弊端
     
    
1、兼容性。Ajax的立命之本是前面提到的XMLHttpRequest,然而这个对象在各个浏览器中不尽相同,这就增加了我们开发过程中完成一个跨浏览器的通用代码的难度,而JavaScript这种语言在各种浏览器中对技术的支持和标准也不同,从而加剧了这种困难性。好在市面上纷繁的Ajax框架已经为我们解决了兼容性问题,让我们构建跨浏览器的程序变得简单起来。
     2、服务器压力。本人认为Ajax把客户端请求服务器响应这一过程变为异步执行,一方面提高了用户体验,同时使得用户请求响应的次数显著增加,服务器面临的压力也将增强,试想一下,以传统整页加载的方式当用户请求一个页面时候必然会等待页面装载,而Ajax使得请求发出后页面并不需要等待,这样用户可以点击其他页面元素再次发送请求,试想一下Google的AutoComplete功能如果是链接数据库请求的话,每次输入都会发生这一行为,那数据库压力是否成倍增长?
     3、语言问题。由于Ajax以JavaScript为核心,而这是一种繁杂而又易出错的语言,它会使得我们将应用逻辑任意地散布在服务端和客户端中,这使得问题很难被发现而且代码很难重用。JavaScript甚至被服务端开发人员认为是一种企业级应用不需要使用的东西应该尽力避免。幸好出现了Microsoft Script Debugger等强大的JS调试器,同时VS2008的JavaScript智能功能也在为这些问题而做着努力。然而JavaScript的缺陷如双重变量赋值(通常是由于缺少数据类型)使得调试程序依然面临挑战。

     相关技术

     由于XMLHttpRequest返回的响应是以字符串形式出现,因此XML成为理想的选择,Ajax中的x预示着XML将终身伴随着Ajax,因为大多数开发人员已经掌握了这项流行的技术。对于Xml来说理解Dom是必须的,Xpath为Xml操作提供了捷径,而XSLT为输出Html提供了天然的温床,因此所谈到的这些技术作为Ajax开发者必须掌握。加上新引入的XMLHttpRequest对象,和更复杂的JavaScript代码,相信技术的学习依然会痛苦一段时间。

      
     说到这里已经算为Ajax开了个头了,希望对初学Ajax的朋友能提供学习上的指引,本人也是菜鸟,望高手勿见笑。
      
     
      
     
posted on 2008-01-24 23:54 sharping 阅读(1920) 评论(20)  编辑 收藏 所属分类: .NET

Feedback

#1楼  2008-01-25 00:05 nicholas.sun      
我也正在学习ajax
楼主分析的极是
不要ajax而ajax;学习一种技术或思想就应该知道它有什么优点、缺陷及原理


  回复  引用  查看    

#2楼  2008-01-25 01:13 Jeffrey Zhao      
虽然ajax有x,但是基本上大家从来不用xml,而用json。
因为在不同浏览器里处理xml方式大相径庭,其次json被js天然支持了。
  回复  引用  查看    

其实很多所谓的缺陷还要看怎么用.

shooter.cn, 原来用的静态页面生成, 后来改用AJAX, 按照站长的说法, 达到了静态生成的性能, 动态服务器页面的灵活程度. 至于GoogleSuggest之类的东西, 从本质上来讲其带来的压力与AJAX无关, 即使Winform, 不照样要面临请求数的问题?

再比如语言问题. 非强类型语言确实有很多缺点, 但具体到JS, 作为一种横跨函数式和命令式特征的语言, 其灵活性也大大的得到提高, 真正缺的是程序员的设计实力. 另外, 实现相同的功能/结构, JS提供的特性要比C#/Java之类单纯的多, 要说繁杂恐怕也说不上吧...

JS唯一的问题就是它还不能干什么: 所有吃CPU的计算; 源代码保密; 安全性问题; 等等.

AJAX与其说是一种技术, 不如说是一种模式, 一种手法, 短短几行话就能说清的东西自然没什么深度. 真正的深度还是在架构设计与程序设计本身变得灵活了, 出现了更多的我们要去掌握的分解与组合方式, 导致其内涵远远超出这四个字母.
  回复  引用  查看    

#4楼  2008-01-25 08:38 王立斌      
我对这小段话非常的欣赏,您分析的很到位,也恰巧说到我心里去了。其实不光有上面的问题,还存在ajax框架版本过多,开发人员开发方式多种多样带来的版本不统一问题,这样带来代码的杂乱,给维护跟升级带来困难。

  回复  引用  查看    

#5楼  2008-01-25 08:55 dusonchen [未注册用户]
现在这么多Ajax框架,都不知道学哪种好了?
  回复  引用  查看    

#6楼  2008-01-25 08:59 站在夕阳下      
AJAX其实也是有很大的压力,并不是任何一个页面都适合,关键是看该页面的内容以及交互量的大小.
现在.net的AJAX多是采用httphandle的模式来交互的!!
当然还有诸如JQUERY等轻量级的js框架来进行ajax,并且他在兼容性方面都很有发展!
  回复  引用  查看    

#7楼  2008-01-25 09:03 海风0101 [未注册用户]
用jquery自己写。
  回复  引用  查看    

#8楼  2008-01-25 09:23 留恋星空      
很喜欢这样探讨问题本质
  回复  引用  查看    

#9楼  2008-01-25 09:36 ytzong      
还是喜欢简单的东西,JS太多浏览器超占资源
  回复  引用  查看    

#10楼 [楼主] 2008-01-25 09:39 sharping      
@Jeffrey Zhao

哎,刚开始入门,只看了一些原理上的资料,实际实现接触的很少,因为一直做的是WinForm开发,所以可能有的理解是错误的,您的网络广播课程我也正在下,还没开始看,我发现微软的UpdaterPanel并没有用json也不是XML啊,是不是微软的格式又是自己的标准?其他框架我也没研究到底是Xml多还是json多。
  回复  引用  查看    

#11楼 [楼主] 2008-01-25 09:45 sharping      
@怪怪(未登录)

我觉得我们看的观点有些异样,实现上的设计那是另一个层面的东西,做什么程序都需要设计吧,那不单单是技术的学习,还需要经验的积累,就好比说23种设计模式你全学会了也没有,照旧写糟糕的代码,我从一开始并没有打算讨论这些。还有“JS提供的特性要比C#/Java之类单纯的多, 要说繁杂恐怕也说不上吧... ”我并不觉得JS会比C#简单,它是过程化的,虽然带入一些面向对象特性,但总是比面向对象语言要复杂,从代码重用性就能看出,还有JS语法上的杂乱我觉得复杂性也不小。可能是我的JS功力太低吧...
  回复  引用  查看    

#12楼  2008-01-25 10:14 贝哥      
我刚想开始学,看样子.NET要学的东西太多了,我都不知道从哪里下手,哪位能给点建议吗?
  回复  引用  查看    

#13楼  2008-01-25 10:15 风景年华      
ajax给javascript带来了新的活力甚至可说有了ajax,javascript才有了自己的“主心骨”。因为有了ajax,javascript才能真正担当起在表现层与用户交互的“大任”,ajax成为了表现层与业务逻辑层进行交互的关键桥梁。未来bs要想取代cs(当然是一定程度上的,不过这是一个趋势),ajax或者是基于ajax的扩展浏览器组件将会成为关键突破点。问题就是js本身能否担当起历史赋予的重任,一种强大的基于宿主的受限脚本语言是必须的。
  回复  引用  查看    

#14楼  2008-01-25 11:00 子曰2 [未注册用户]
.....不就个方法..不用它照样可以无刷新..
  回复  引用  查看    

#15楼  2008-01-25 11:17 万一      
学习
  回复  引用  查看    

#16楼  2008-01-25 11:41 海11 [未注册用户]
我觉得刷新页面挺好,现在用ajax反而不习惯。怪怪的!
  回复  引用  查看    

#17楼  2008-01-25 12:12 李华顺      
用jQuery,效率才是王道
  回复  引用  查看    

#18楼  2008-01-25 13:10 狗尾草.      
个人以为讨论ajax的压力等问题都不合适,WEB的基本开发方式没有改变,只能说是一个亮点。
  回复  引用  查看    

#19楼  2008-01-25 14:11 早班火车~      
ajax有好有坏,要具体问题具体分析。
比如有时页面无刷新反倒给用户造成错觉以为点击页面没有变化。
pv也是个很重要的因素。
所谓鱼于熊掌不能兼得。

  回复  引用  查看    

#20楼  2008-01-25 17:50 破曉之陽      
路過。
  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印
最新IT新闻:
· 微软高管:Wii用户最终会成为Xbox 360用户
· 遵守YouTube案裁定 谷歌将陷入隐私指控深渊
· iPhone入华在即 中国手机产业生存面临考验
· 阿里巴巴集团再向淘宝注资20亿元
· 56被关一月 危机的是整个视频业