AJAX In Google

来源:互联网 发布:36周胎儿b超数据标准 编辑:程序博客网 时间:2024/04/29 18:50

Google,囊括了美国顶尖的Web开发高手,开发的Gmail、Google Reader、Google Maps也是Web2.0应用的经典。

它们都是AJAX技术的杰出应用,然而有趣的是,他们使用的技术却各有不同。这也许是因为不同的开发小组的风格不同,但一些细节却透露出这也许是Google高手们针对不同应用的不同需求采用了不同的实现方法,以达到最完美的效果。真正的高手的高就在于此吧。

下面来分别看看这几个应用。

1、Gmail:

Gmail使用自己独特的协议在HTTP层进行浏览器和Web服务器之间的通信。

首先,浏览器端通过Javascript XmlHttpRequest向 服务器发送请求,比如请求Inbox信息的URL为: /gmail?search=inbox&view=tl&start=0&init=1&zx=,而请求所有未读信息 的URL为:/gmail?search=query&q=is%3Aunread&view=tl&start=0& init=1&zx=。然后,服务器返回称为DataPack的数据块。

Google做的第一个有意思的事情是,这个DataPack并不是基于XML的,而是一个基于Javascript数组格式的HTML文件。它可 以包括多个DataItem,而一个DataItem是由一个封装函数包括的Javascript数组,例如这样的格式:D([”ts”, 0,50,106,0,”Inbox”,”fd36721220″,154]); 这里的D()是一个实时解析函数,而”ts”是DataItem的类型。

这样做的好处是:客户端Javascript程序可以避免对XML的解析而直接使用这些数据,从而能提高处理速度并节省系统资源。

此外,Gmail客户端每隔2分钟会自动向服务器发送刷新请求,在这里Gmail又做了一个优化。那就是在刷新请求里有一个时标(又有点象 CheckSum)。然后Gmail服务器如果发现当前数据不比这个时标代表的数据新,它就会仅仅返回一个空的DataPack,以节省网络和系统资源。

2、Google Suggest

Google Suggest同样使用Javascript定时向服务器发送XmlHTTP请求,而服务器返回的是一个Javascript回调函数。回调函数的格式 如:sendRPCDone(frameElement, “fast bug”, new Array(”fast bug track”, “fast bugs”, “fast bug”, “fast bugtrack”), new Array(”793,000 results”, “2,040,000 results”, “6,000,000 results”, “7,910 results”), new Array(”")); 其中,sendRPCDone是一个本地定义的Javascript函数。

收到服务器返回的回调函数后,本地网页利用Javascript eval()函数直接执行返回的函数,将结果显示出来。简单、直接。

值得一提的是,研究Goolge Suggest的Chris将Google精简却难以理解的Javscript程序重写了,值得想要学习Javascript的同志们一看。Google将他的Javascript程序精简是可以理解的,因为可以压缩代码大小,从而提高网页下载速度。

3、Google Maps

和前面两者不同,Google Maps本地端不使用XmlHTTP,而是使用IFrame。而服务器端返回的是一个HTML文件。这个文件在本地网页中隐藏的一个IFrame里打开。 当它被打开时,它通过调用window.parent._load()函数,将自己包括的、由服务器返回的XML数据块传给本地网页,从而完成浏览器到服 务器的数据交互。

用IFrame的好处是,IFrame会将自己的状态记入浏览器的历史状态中,这样,用户可以通过按浏览器的”返回”按钮,回到以前的地图。而XmlHttp因为不计入浏览器的历史中,所以如果用XmlHttp的话,就只能回到进Google Map以前的那个网页了。

而Google Maps的另一个特点是,本地网页收到数据块后,依旧利用浏览器内置的XmlHttpRequest进行解析,然后利用XSL进行显示,非常的格式化。

 
原创粉丝点击