2019独角兽企业重金招聘Python工程师标准>>>
Ajax是"Asynchronous JavaScript And XML"的缩写(即:异步的JavaScript和XML),是一种实现无页面刷新获取服务器数据的混合技术,Ajax这个概念的最早提出者是Jesse James Garrett。我们知道,互联网最主要的功能在于"资源交换",当初发明互联网的科学家们也是基于这个动机。虽然在互联网中"资源交换"的主体都是计算机。但为了方便交流,我们通常将获取资源的一方称为客户端(主要的工具是浏览器),而将派发资源的一方称为服务端。
在AJAX技术出现之前,如果浏览器需要从服务器请求资源,其交互模式为"客户端发出请求 -> 服务端接收请求并返回相应HTML文档 -> 页面刷新,客户端加载新的HTML文档"。确实,这种交互模式十分简洁明了,而且非常符合人的直觉,对于那时游走于互联网中的极客而言,也确实够用了。但是随着时代的进步,互联网渐渐不只是极客们的娱乐场,越来越多商业化网站的出现,使互联网不再局限于满足人们"资源交换"的需求,人们开始期待能够在互联网中获得更好的"使用体验",而随着用户点击不断刷新页面的交互方式显然很难讨人喜欢。
AJAX技术的问世,不仅通过阻止浏览器接受响应时刷新页面提升了互联网用户的使用体验,还使开发者能够以更加微观的视角重新思考互联网应用的构建,从此,开发者将在"数据"层面而不是"资源"层面以更高的自由 度构建网站和Web应用。
有没有办法在页面数据变动时,只向服务器请求新的数据,并且在阻止页面刷新的情况下,动态的替换页面中展示的数据呢? -- 答案正是"AJAX"。
再试想这样一种情景,当用户点击页面中的某个按钮向服务器发送请求时,页面本质上只是一些数据发生了变化,而此时服务器却要将重绘的整个页面再返回给浏览器加载,这显然有悖于程序员的"DRY"原则,而且明明只是一些数据的变化却迫使服务器要返回整个HTML文档,这本身也会给网络带宽带来不必要的开销。
经典Web应用程序模型的工作方式如下:
用户界面中的大多数用户操作都会将HTTP请求触发返回Web服务器。服务器进行一些处理-检索数据、处理数字、与传统系统对话,然后向客户端返回HTML页面。这种方法具有很多技术意义,但是它并不能为用户带来出色的体验。虽然服务器正在做它应该做的事情,但是在服务器工作时用户只能等待它完成。
图1 传统Web应用与使用AJAX的Web应用
显然,如果我们重新设计Web应用程序,我们就不会让用户等待。我们通过在用户和服务器之间引入中介(Ajax引擎),Ajax应用程序消除了Web上交互的启动-停止-启动-停止性质,浏览器不是加载网页,而是在会话开始时加载一个Ajax引擎-用JavaScript编写。该引擎负责呈现用户看到的界面并代表用户与服务器通信。Ajax引擎允许用户与应用程序的交互异步进行-与服务器的通信无关。因此,用户就不会在盯着空白的浏览器窗口和等待载入的图标或者等待服务器处理结束了。
同步的过程只有允许有一个进程在执行,比如服务端在处理数据的时候,那么客户端不能进行任何操作,处于一个阻塞的一个状态。
使用ajax的程序,服务端在处理数据的时候,客户端浏览器依然可以执行其他的操作,并没有阻塞状态,也就是一个时间段内可以有多个进程在执行。
图2 传统Web应用运行流程
图3 使用AJAX的Web应用运行流程