1、Ajax 出现的背景
最近一段时间,关心 Web 开发的朋友在网络上会经常听到 Ajax 这个 buzzword。使用 Google 搜索,会搜索到无数自称是 Ajax 的例子。这些例子的作者得意洋洋地展示自己学会了 xmlhttp 之后写出的 hello world,自以为已经精通了 Ajax。
最近一段时间,关心 Web 开发的朋友在网络上会经常听到 Ajax 这个 buzzword。使用 Google 搜索,会搜索到无数自称是 Ajax 的例子。这些例子的作者得意洋洋地展示自己学会了 xmlhttp 之后写出的 hello world,自以为已经精通了 Ajax。
那么 Ajax 究竟是什么?它是不是就是等同于 xmlhttp 呢?我们先来从源头说起。
这篇文章发表在 2005 年 2 月 18 号。可能今天的很多朋友还没有读过这篇文章,我来介绍一下其中的内容。
Ajax 是 Asynchronous JavaScript + XML 的缩写,其中用到的主要的技术包括:
基于 XHTML/CSS 标准的展现
使用 DOM 的动态显示和交互
使用 XML 和 XSLT 的数据交换和处理
使用 XMLHttpRequest 的异步数据获取
JavaScript 把所有的一切捆绑在一起
Ajax 是 Asynchronous JavaScript + XML 的缩写,其中用到的主要的技术包括:
基于 XHTML/CSS 标准的展现
使用 DOM 的动态显示和交互
使用 XML 和 XSLT 的数据交换和处理
使用 XMLHttpRequest 的异步数据获取
JavaScript 把所有的一切捆绑在一起
Ajax 的交互模型和传统基于 HTML Form 的交互模型有着非常大的区别。
作者通过以下这个图对于传统的交互模式和 Ajax 交互模式做了一个比较。
我们看到,在传统的交互模式下,客户端并无表示逻辑的执行,由服务器端执行所有的表示逻辑,然后把 HTML/CSS 传给客户端,客户端仅仅做简单的展现。
传统的交互模式最大的问题就是任何哪怕是微小的交互行为都需要到服务器端走一趟,这样所带来大量的延迟令用户感觉很不舒服,也降低了用户的工作效率。可能现在 Web 大量用户已经习惯了等待一个页面刷新的无聊时间,可是这不能成为我们开发者推托有责任改善交互行为的借口。假设在用户使用 B/S 应用之前还使用过 C/S 应用,在 C/S 应用中难道会有这样可笑的事情发生吗?
作者通过以下这个图对于传统的交互模式和 Ajax 交互模式做了一个比较。
我们看到,在传统的交互模式下,客户端并无表示逻辑的执行,由服务器端执行所有的表示逻辑,然后把 HTML/CSS 传给客户端,客户端仅仅做简单的展现。
传统的交互模式最大的问题就是任何哪怕是微小的交互行为都需要到服务器端走一趟,这样所带来大量的延迟令用户感觉很不舒服,也降低了用户的工作效率。可能现在 Web 大量用户已经习惯了等待一个页面刷新的无聊时间,可是这不能成为我们开发者推托有责任改善交互行为的借口。假设在用户使用 B/S 应用之前还使用过 C/S 应用,在 C/S 应用中难道会有这样可笑的事情发生吗?
解决之道是什么?我们再看一下 Ajax 的交互模式。
在客户端多出来了一个 Ajax engine,而且服务器传给客户端的已经不再是 HTML/CSS,而是纯的 XML 数据,客户端通过 XMLHttp 向服务器端发送请求。所有的表示逻辑在客户端通过 JS 脚本来执行,然后通过修改 DOM 来完成展现。
在客户端多出来了一个 Ajax engine,而且服务器传给客户端的已经不再是 HTML/CSS,而是纯的 XML 数据,客户端通过 XMLHttp 向服务器端发送请求。所有的表示逻辑在客户端通过 JS 脚本来执行,然后通过修改 DOM 来完成展现。
由于有了位于客户端这个中间层,可以把原先必须在服务器端完成的很多交互工作放在了客户端完成,而客户端的 Ajax engine 的响应是即时的,因此用户的交互体验得到了极大的改善。我们可以通过下面这张图来比较两种交互模式下的时间分配。我们可以看出,传统的基于 HTML Form 的交互模式下用户的大量时间都浪费在了无聊的等待之上。这种新的交互模式的最大优点就是改善了用户的体验。此外还有很多其它方面的优点,例如不需要刷新页面、减少了服务器的处理负担、减少了交换的数据量等等。
那么 Ajax 是不是一种神奇的新技术呢?完全不是,从 Ajax 所用到的上述核心技术来看,任何一种技术都是已经成熟了多年的技术,据我所知,最晚在 2001 年,所有这些技术都已经成熟并且进入了实用阶段。因此,我仅仅是把 Ajax 看作是传统的基于 XHTML/CSS/JS 开发的复兴。实际上我以前所在的公司已经完全采用这种架构做 Web 开发有 3 年之久。我们已经完全摒弃了 HTML Form。所以当我看到这篇文章的时候想到,如果我们早发明一个词,那这种新的 Web 开发模式可能就不叫 Ajax 了。不过这也证明了我们在几年前做出的决定还是有先见之明的。
虽然在这个词出现很多年以前就已经有大量的开发人员采用这种开发模式,不过现在既然出现了这个词,起到了规范术语的作用。去年在 JavaEye 活动上做 XMLHttp 开发的讲座时我感觉自己是相当另类的一个人,因为那时候还没有多少 J2EE 开发人员会对 JS 感兴趣。现在 Ajax 越来越进入 J2EE Web 开发的主流领域,而且会长期保持它的生命力。
虽然在这个词出现很多年以前就已经有大量的开发人员采用这种开发模式,不过现在既然出现了这个词,起到了规范术语的作用。去年在 JavaEye 活动上做 XMLHttp 开发的讲座时我感觉自己是相当另类的一个人,因为那时候还没有多少 J2EE 开发人员会对 JS 感兴趣。现在 Ajax 越来越进入 J2EE Web 开发的主流领域,而且会长期保持它的生命力。
5 月底 JavaEye 的活动上听熊节的演讲,什么也没记住,只记住一个词:古已有之。其实 Ajax 也是古已有之。Ajax 也不过就是新瓶装旧酒,但是它把以前由美工单独使用的这些技术(至今仍然有大量的 J2EE 开发人员认为写 JS 完全是美工的任务)完美地结合在了一起,产生出了巨大的价值。Ajax 是一种新的交互模式或者开发模式,而不是一个现成的框架。基于 Ajax 思想开发的应用都可以称作是 Ajax 应用。Ajax 对于这些传统的 J2EE 开发人员不怎么关心的客户端技术进行重新包装,对于企业应用产生了巨大的价值。我们知道表示层开发始终是具有重大意义的,占用了开发项目几乎一半的工作量。而用户很多时候就是看你的界面和交互,所以这部分是不能马虎的。架构你可以稍微马虎一点,基于 Spring/Hibernate 差也不会差很多。但是界面和交互是用户立刻能感受到的东西,是不能马虎的。