`

Ajax——聊聊它的优缺点

阅读更多
[img][/img]AJAX这个字眼闪烁于技术领域也不是一天两天的事情了,不过火起来。。大概是在2005年吧。
AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术。

据我的初步的不成熟的了解,AJAX并非一种技术,而是一堆相互独立又相关的技术的巧妙应用,算是个结合体。构成AJAX的关键技术主要有这些陈芝麻烂谷子:JAVASCRIPT/XML/XSLT/XHTML/CSS。

怎么样,熟悉的不能再熟悉了吧。确实,其新意并不在于这些陈芝麻本身,而在于他们的相互作用和组织形式,如下所示。
使用XHTML+CSS来表示信息;
使用JavaScript操作DOM(Document Object Model)进行动态显示及交互;
使用 XML 和 XSLT 进行数据交换及相关操作;
使用 XMLHttpRequest对象与Web服务器进行异步数据交换;
使用 JavaScript 将所有的东西绑定在一起。
说了这么多,那么Ajax具体有哪些好处呢,在我看来有两点是最吸引眼球的。一是“Asynchronous”异步控制,二就是局部刷新。

前者打破了传统WEB应用的同步模式,使用异步模式可以减少用户等待,可以在画面上实现更多的功能更便利的交互以改善客户感受,在技术层面则可以带来更灵活的应用结构组织方式;后者的优势则比较明显,对于传统的WEB模式而言,用户与Server间的每一次Request/Response,都需要Server端将动态内容重新拼凑整个的HTML并返回给用户。但是AJAX使用局部刷新方式,这就意味着其余的整个页面的内容都无需任何变动。根据AJAX倡导者的统计,使用AJAX可以节省95%的网络传输开销,另外WEB应用的运算和IO吞吐的开销同样会因此大幅降低。

我们可以想像,如果将AJAX和业已成熟的WEB SERVICE技术结合起来,将会给WEB应用的技术领域带来什么样的变化?

但是好东西归好东西,滥用也是不好地。AJAX再好,也要在它的适用领域里才能发挥应有的优势,如果把它当狗皮药膏到处乱贴,也只会招来一片臭骂,所以,当你打算在某一个产品或项目里面实施AJAX的话,不妨先看看AJAX的重要缺点。

一、AJAX是一个基于JavaScript/DOM/CSS的客户端技术,所谓的客户端其载体便是浏览器,说到浏览器,最让人头痛又历史悠久且无法妥协的问题便是兼容性。目前生产浏览器的厂商很多,而其产品的兼容性问题的焦点便体现在对JavaScript/DOM/CSS的支持上,虽然大多数的内容可以互相兼容,但是,往往就是为了一点点的不兼容而让开发者和用户痛不欲生,古往今来鲜血淋漓的经验教训太多了,AJAX必须考虑这个问题。

二、对于某种人或事或物,其最大的优点往往又同时是其最大的软肋,仿佛这就是辩证法或自然规律?OK,言归正传,看看AJAX的第一大优点是怎样变成弱点的,对于异步处理需要考虑当用户随意提交多个原本在业务上需要按顺序提交的请求的时候,服务端应答的时候就可能得到一个和业务要求不一致的顺序,另外,就算用户是按照顺序提交请求,但是因为每种请求的服务器端运算耗时不一样,同样可能导致应答顺序错位,这是一个需要留给设计者和开发者考虑的问题;

三、再来看看局部刷新,局部刷新最直接的一个弊端就是它将使浏览器原有的的“回退”和“历史记录”功能失去意义,让浏览器厂商大幅修改业已成熟的浏览器标准和技术显然不太现实,所以只能由AJAX框架提供商和开发者来共同干掉这个弊端。

四、然后再提到一个会让已经熟悉传统模式的WEB应用设计者眼睛充血头痛欲裂的缺点,AJAX将可能导致业务逻辑由集中变得分散。高内聚低偶合的观点,一直是软件设计师的指导方针和必然目的,使用AJAX之后,将会有一部分业务逻辑向客户端迁移,也就是说,以前集中在服务端的数据取得和输出页面构成两个工作中的“输出页面构成”将会被转移到客户端中,传统B/S结构的瘦客户端模式也可能会在一夜之间变成一个大胖子,如何重新规划整个应用以适应AJAX的思想,将是设计师要仔细斟酌的一个问题。

五、最后还不得不指出一个让人深恶痛绝的语言问题。AJAX在浏览器端依赖JAVASCRIPT或其同类作为开发语言,众所周知,JAVASCRIPT这种弱语言,不支持强类型、不完全支持OO(这很致命)、执行效率低下、缺乏IDE支持、无法使用重构等等。

呵呵,这么一大堆骇人的缺点是不是把你给吓着了呢?其实也不用那么夸张,只要我们掌握一个原则:适度。其实任何技术都一样,在其适用领域便如鱼得水,如果将之用错地方就可能会是。。。如果说人家只是要开发一个在红白机上运行的俄罗斯方块,你非要让人家搭上什么WEB SERVICE啊什么J2EE之类的东西,那么就无异于搬起石头砸自己的脚吃力不讨好。那么AJAX的适用领域又在哪里呢?其实根据其优点缺点一梳理便知道了,在需要快速响应并避免太多网络带宽消耗、不需要在浏览器端记录历史信息、客户端UI要求灵活多变的场合下,我们将会看到AJAX叱咤风云大显身手,例如目前的Google Map、Gmail等诸多流行应用,已经适用AJAX来武装自己了。

对于AJAX的诸多弱点,实际上目前已经有很多AJAX的引擎提供商提供了种种相对完善的解决方案,相信不久的将来AJAX便可以克服这些缺点,以在WEB开发领域发挥更大的威力。另外,可喜的,我们看到了越来越多重量级的厂商开始对AJAX提供全面的支持,包括可以算作AJAX之父的MS,还有IBM、SUN等一票子大恐龙,而且,IBM还将在Eclipse的后续版本中提供对AJAX的直接支持,届时AJAX应用的开发将拥有直接的--而且是优秀的IDE支持。最后,让我们来对比传统的WEB应用学习一下AJAX的结构模型和异步工作模型吧。
图1为传统WEB应用和基于AJAX的WEB应用的模型比较

图2为传统WEB应用的同步工作模型


图3为基于AJAX的WEB应用的异步工作模型

  • 大小: 111.2 KB
  • 大小: 62.5 KB
  • 大小: 114.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics