当前位置导航:炫浪网>>网络学院>>网页制作>>AJAX教程

AJAX有没有未来?

    【IT168 专稿】AJAX是若干成熟技术的组合,旨在让用户从Web应用中获得更加满意的用户体验。本文回顾了企业应用体系结构的进化历程,试图阐述AJAX是B/S架构发展的必然产物,但是,由于AJAX赖以生存的JavaScript编程语言的先天不足,AJAX似乎又前途堪忧。本文作者从中间件的角度,对AJAX的未来作出了自己的预测。

    1. 什么是AJAX

   AJAX的全称是Asynchronous JavaScript and XML,即异步JavaScript和XML。这是一种多项成熟技术的组合,其目的是让Web应用获得与用户快速、即时交互的能力。AJAX所组合的技术,包括:
    • JavaScript,Java脚本语言(注意,此Java非Sun公司的Java)
    • DHTML,Dynamic HTML,动态HTML
    • XML,Extensible Markup Language,可扩展标记语言
    • CSS,Cascading Style Sheets,层叠样式表单
    • DOM,Document Object Model,文档对象模型
    • 微软的称为XMLHttpRequest的对象

    在AJAX技术下,用户会感觉到网页与普通桌面应用一样,响应迅速,而不是像传统网页那样,任何操作都需要等待页面的刷新。AJAX是如何做到这一点的呢?有两个秘密:第一,其实AJAX也会刷新页面,只不过,AJAX可以只刷新部分页面,而不是整个页面;第二,AJAX的页面刷新是异步的,就是说,用户可以继续他的其他操作,而不必等候刷新完成。

    当用户浏览一个基于AJAX的Web应用时,用户的请求被提交给一个称为AJAX引擎(AJAX Engine)的代理,这个AJAX引擎负责接收用户请求,从Web服务器上获取响应,并更新浏览器内容。形象地说,传统的Web应用中,浏览器是直接和Web服务器打交道的,而在AJAX应用中,浏览器和Web服务器之间出现了一个来回跑腿的“中介”,而且这个 “中介”相当的勤快,所以,能够给浏览器提供更好的服务,从而使用户获得更满意的应用体验。

    AJAX应用的例子,Google Map是一个典型。打开Google Map网站(),会看到一张地图,对地图进行放大、缩小以及拖动等操作,网页的响应十分迅速,看起来好像浏览器事先加载了整张地图。其实,浏览器只是根据你的操作,向服务器请求你所看到的那些数据,并异步地更新你的浏览器内容,这一切,都拜AJAX所赐。

    JavaScript和微软的XMLHttpRequest对象,是AJAX 引擎的两条腿。当与浏览器交互时,AJAX引擎使用JavaScript语言;而当与Web服务器交互时,则使用微软的XMLHttpRequest对象。由于AJAX引擎依赖微软的XMLHttpRequest对象技术,所以,早期只有微软的IE浏览器支持AJAX。现在,随着采用AJAX技术的Web应用的不断涌现,所有主流的浏览器,例如Firefox、Netscape、Opera、Safari等,也都支持AJAX了。

2. 企业应用体系结构的进化历程

    在笔者看来,AJAX的出现,并非偶然。为了说明这一点,让我们来回顾一下,计算机应用体系结构的发展历史,这或许有助于我们揭示AJAX的来历。

    最早的计算机应用,是单机程序,运行在一台计算机上,那时还没有计算机与计算机之间相互通信的概念,因为单机应用已经足以满足人们的需要。因此,两台计算机即使放在同一个实验室,也是“机”犬相闻,老死不相往来。

    人的欲望是永远也不会满足的,单机应用没有持续多久,两台计算机之间交换数据的需求,就随着计算机应用范围的扩展而出现了。在PC领域,最初的计算机数据交互形式是串口通信,后来,随着Novell公司著名的NetWare网络技术的推出,运行在两台不同机器上的程序,有了可以更方便地交互的渠道,于是出现了客户机和服务器,即所谓的Client/Server结构,简称C/S结构。C/S结构因其将应用划分为两个部分的特点,也被称为“二端”体系结构。

    C/S结构流行若干年后,人们发现,仅仅划分“客户端”和“服务器”两个角色,已经不敷使用,因为随着应用复杂度的不断增加,客户端和服务器都变得越来越庞大,于是,三端体系结构冒了出来,在服务器和客户机之间增加了一个称为“中间件(MiddleWare)”的“端”。在三端体系结构中,原来散布在“客户端”和“服务器”上的一些功能(主要是应用逻辑),慢慢转移到了中间件上,这样就有效地减轻了“客户端”和“服务器”日益沉重的负担,系统的架构重新趋于平衡。

    三端体系结构现在仍是企业应用的事实上的标准,这是由三端体系结构的适应性决定的。三个端中,中间件最为灵活,一方面可以担负一部分客户端的任务,有助于打造低成本的“瘦”客户端;另一方面,一些通用的服务也可以从服务器上挪到中间件上,让服务器的功能更加专一,以提高性能。中间件技术,作为三端体系结构的核心技术,催生了很多以中间件为主要产品的软件公司,激烈的竞争,使得中间件技术日趋成熟。

    此后虽然出现了所谓的多端(nTier)体系结构,本质上还是三端的,其区别只是一个应用中包含了不只一个中间件和服务器,而是多个中间件,多个服务器,甚至多种客户端。

    3. AJAX是B/S结构向三端体系结构进化的产物吗

    在“客户端/服务器”体系结构向“客户端/中间件/服务器”体系结构演变的过程中,随着互联网技术的广泛应用,一种更简便的体系结构出现了,那就是所谓的“浏览器/服务器(Browser/Server)”体系结构,简称B/S结构。B/S结构一经出现,就因其无需开发客户端,能大幅度降低企业应用中客户端部署和维护的成本等优点,迅速获得了软件企业及其客户的青睐。现在,B/S结构是最流行的应用体系结构,不论是大型的企业应用,还是小型的个人应用,B/S结构都是首选的体系结构,几乎成了IT界的“默认”选择,甚至我们在谈起某某应用时,都不需要特别说明是什么体系结构了。

    如果将B/S结构看作是C/S结构的变种(可能有人不同意,呵呵,只是笔者个人见解而已),那么,我们可以发现,B/S结构不是三端体系结构。在B/S结构中,作为“客户端”的浏览器和作为“服务端”的Web服务器,是直接交互的,并没有中间件的介入,企业应用的业务逻辑,要么驻留在服务器(包括Web服务器、数据库服务器等)上,要么以浏览器作为容器,没有其他去处。因此,从“端”的角度看,B/S结构其实是“二端”的,像C/S结构一样。

    如果这个论点是成立的,那么,C/S结构从“二端”向“三端”的演变,是否预示了,B/S结构也会按照同样的方式进化,从而在浏览器和客户端之间,产生出一个“中间件”呢?

    AJAX的出现,似乎是对这种预示作出的响应。仔细观察,我们可以在AJAX身上发现中间件的某些特征。首先,AJAX所承载的功能,原本是分布在Web服务器和浏览器上的,AJAX的介入,减轻了客户端和服务器的负担,许多原本需要重载整个页面的请求-响应处理,现在只需重载部分页面了;其次,AJAX部分地接管了浏览器和Web服务器的通信,而通信拦截是中间件的重要特征之一。一方面,AJAX对浏览器的请求进行预分析,另一方面,AJAX对Web服务器的响应进行预处理,AJAX在浏览器和Web服务器之间,扮演了一个“中介”的角色,与三端体系结构中的中间件非常相似。

    有趣的是,中间件的出现时机和AJAX的出现时机,也大致相同。C/S结构进入企业应用领域若干年后,中间件出现了,而AJAX的出现,也是在B/S结构开始流行后的若干年。具体的时间长度已经不可考证了,不过,可以留意到的是,中间件是在C/S结构应用大量涌现,客户端和服务器日益膨胀的背景下诞生的,而AJAX也是在B/S结构应用如雨后春笋般冒出,网页上Flash和广告群魔乱舞,用户不再满足于平淡和迟钝的应用体验的情形下,在Web应用中崭露头角的。

    4. AJAX有没有未来

    如果问一下,Web世界里谁是炙手可热的红人,不少人一定会选择AJAX了。不错,AJAX现在确实非常火爆,自从Google开创了AJAX应用的先河之后,在Web领域,应用不论大小,程度不分高低,只要和Web沾边的,人也好物也好,都要披上一件AJAX的时尚外衣,以示自己没有落到潮流的后面。AJAX就像一桌美味佳肴,虽然选材未必精良,但色香味俱全,在这样的诱惑下,程序员们要保持冷静的态度和清醒的头脑,殊非不易。其实,洗净AJAX表面的各味调料,将AJAX的真材实料展示在食客的眼前,我们就会感觉到,AJAX的未来并不明朗。

    理由之一,虽然从企业应用体系结构发展的历史来看,AJAX的作为B/S结构的中间件出现,有其必然性,但别忘了,这是有假设条件的,这个假设条件就是,B/S结构可以作为二端结构来看待。这个假设不是所有人都同意的,因为也有一种观点,是将B/S结构看作三端结构。很简单,只要将Web服务器往前提一提,B/S结构就变成三端结构了:浏览器是客户端,数据库是服务器端,而Web服务器是中间件。这是非常典型的Web企业应用架构,可是在这个架构下,AJAX没有地位。AJAX的一部分在浏览器,另一部分在Web服务器,并没有独立出来,它必须依附浏览器和Web服务器而存在,因此,AJAX还不能单独成为一个端,当然,也就更谈不上成为中间件了。

    理由之二,即便大家都同意B/S结构可以视为二端结构,AJAX想要攀升到中间件的地位,仍然面临许多悬而未决的问题。首先,AJAX赖以生存的编程语言是JavaScript,这是一个脚本语言,是解释性语言,虽然简单、灵活并且容易上手,但具有解释性语言的先天不足,比如,执行效率就是JavaScript的一个大问题,在浏览器上玩些花样尚可,如果要作为中间件的编程语言,那就有点勉为其难了;其次,脚本语言结构管理能力的低下,也是JavaScript成为中间件编程语言的障碍,用JavaScript很难写出像C++或Java那样规范、可靠、合理而优美的程序,而且,现今广为接受的面向对象的编程思想,在JavaScript下要运用起来,似乎也不是特别的自然。

    如此看来,AJAX的未来确实非常迷茫,即使受到越来越多AJAX支持者的追捧,但如果想要走得更远,似乎也心有余而力不足。AJAX问题的症结,就在于JavaScript语言。对于这种语言,一直有两股势力在对抗。一种是看好JavaScript,认为其简单易学、灵活多变而且功能强大;另一种则对JavaScript不屑一顾,甚至根本不愿意承认它是一种编程语言。我见过一些非常资深的程序员,对JavaScript的态度,可以用“仇视”二字来描述。一种语言同时受到如此截然相反两种对待,我所知道的,也就只有JavaScript了。

     JavaScript遭受到的如此冰火两重天的待遇,注定了建立在JavaScript之上的AJAX的尴尬地位。AJAX的未来,很大程度上取决于JavaScript的前途。胜者王侯败者寇,现在AJAX最关心的,莫过于JavaScript面前水火不相容的两股势力,谁会是最后的赢家。AJAX和JavaScript,一根线上的两只蚂蚱,它们的未来,已经牢牢地绑定在一起,谁又能把它们分开呢?

返回炫浪学院
相关内容
赞助商链接