天天看點

Ajax技術全解(4)

Ajax技術全解

之四

AJAX全稱為“Asynchr JavaScript and XML”(異步JavaScript和XML),是指一種建立互動式網頁應用的網頁開發技術。

Ajax技術是目前在浏覽器中通過JavaScript腳本可以使用的所有技術的集合。Ajax并沒有創造出某種具體的新技術,它所使用的所有技術都是在很多年前就已經存在了,然而Ajax以一種嶄新的方式來使用所有的這些技術,使得古老的B/S方式的Web開發煥發了新的活力,迎來了第二個春天。

具體來說,Ajax基于以下的技術:

XHTML:對應W3C的XHTML規範,目前是XHTML1.0。

CSS:對應W3C的CSS規範,目前是CSS2.0

DOM:這裡的DOM主要是指HTML DOM,XML DOM包括在下面的XML中

JavaScript:對應于ECMA的ECMAScript規範

XML:對應W3C的XML DOM、XSLT、XPath等等規範

XMLHttpRequest:對應WhatWG的Web Applications1.0規範([url]http://whatwg.org/specs/web-apps/current-work/[/url])的一部分

可以看出,除了XMLHttpRequest以外,所有的技術都是目前已經廣泛使用,得到了廣泛了解的基于Web标準的技術。而XMLHttpRequest雖然尚未被W3C采納,其實已經是一個事實上的标準。幾乎所有主流的浏覽器,例如IE、Firefox、Netscape、Opera、Safari全部都支援這個技術。是以Ajax就是目前做Web開發最符合标準的技術。上述的所有技術都已經可以在浏覽器中使用,是以使用者不需要安裝任何額外的軟體(隻需要一個浏覽器,例如IE),就可以運作任何符合标準的Ajax應用。這對于Ajax技術的普及、降低部署維護的成本是非常重要的。

此外,随着浏覽器的發展,更多的技術還會被添加進Ajax的技術體系之中。例如,目前Firefox浏覽器的最新版本已經可以直接支援矢量圖形格式SVG。Firefox已經可以支援JavaScript 2.0(對應ECMAScript 4.0規範)中的E4X(JavaScript的XML擴充)。Firefox、Opera、和Safari浏覽器還可以支援Canvas(也是Web Applications1.0規範的一部分),網絡上已經有人開發出了使用Canvas技術制作的3D射擊遊戲的示範版。但是因為這些技術目前還沒有得到市場占有率最高的IE浏覽器的支援,是以目前隻能被應用于一些有限的場合(例如,在企業/機關内部,可以要求使用者隻使用Firefox浏覽器)。

Ajax技術之中,最核心的技術就是XMLHttpRequest,它最初的名稱叫做XMLHTTP,是微軟公司為了滿足開發者的需要,1999年在IE5.0浏覽器中率先推出的。後來這個技術被上述的規範命名為XMLHttpRequest。它正是Ajax技術之是以與衆不同的地方。簡而言之,XMLHttpRequest為運作于浏覽器中的JavaScript腳本提供了一種在頁面之内與伺服器通信的手段。頁面内的JavaScript可以在不重新整理頁面的情況下從伺服器擷取資料,或者向伺服器送出資料。而在這個技術出現之前,浏覽器與伺服器通信的唯一方式就是通過HTML表單的送出,這一般都會帶來一次全頁面的重新整理。

XMLHttpRequest的出現為Web開發提供了一種全新的可能性,甚至整個改變了人們對于Web應用由什麼來組成的看法。在這個技術出現之前,由于技術上的限制,人們認為Web應用就是由一系列連續切換的頁面組成的。是以整個Web應用被劃分成了大量的頁面,其中大部分是一些很小的頁面。使用者大部分的互動都需要切換并重新整理整個頁面,而在這個過程中(下一個頁面完全顯示出來之前),使用者隻能傻等,什麼都做不了。這就是我們所習以為常的Web應用,10年以前就是這個樣子。然而XMLHttpRequest技術的出現使得我們可以打破這種笨拙的開發模式,以一種全新的方式來做Web開發,為使用者提供更好的互動體驗。大量的探索者(自豪的說,也包括筆者在内)以XMLHttpRequest技術為基礎,将一些古老的Web技術重新包裝整合。經過了多年的不懈努力,終于在2005年開花結果。在這一年,出現了一個新的術語Ajax,來描述這樣一類的技術和開發方式。

與傳統的Web開發不同,Ajax并不是以一種基于靜态頁面的方式來看待Web應用的。從Ajax的角度看來,Web應用僅由少量的頁面組成,其中每個頁面其實是一個更小型的Ajax應用。而一些簡單的Ajax應用,例如一個簡單的RSS閱讀器,甚至隻有一個頁面。每個頁面上面都包括有一些使用JavaScript開發的Ajax元件。這些元件使用XMLHttpRequest對象以異步的方式與伺服器通信,從伺服器擷取需要的資料後使用DOM API來更新頁面中的一部分内容。是以Ajax應用與傳統的Web應用的差別主要在3個地方:

1. 不重新整理整個頁面,在頁面内與伺服器通信。

2. 使用異步方式與伺服器通信,不需要打斷使用者的操作,具有更加迅速的的響應能力。

3. 應用僅由少量頁面組成。大部分互動在頁面之内完成,不需要切換整個頁面。

由此可見,Ajax使得Web應用更加動态,帶來了更高的智能,并且提供了表現能力豐富的Ajax UI元件。這樣一類新型的Web應用叫做RIA(Rich Internet Application)應用。除了Ajax,還包括有Flash等技術。

與1990年代末的DHTML相比,Ajax更加強調符合真正的Web标準的開發方式。Ajax對于現有基于Web标準的技術的利用程度比DHTML高出了很多。而DHTML聲名狼藉,最終失敗的最大原因就是在于不重視基于真正的Web标準來做開發。

DHTML其實是浏覽器大戰的時代微軟和Netscape為了吸引眼球而制造的一個名詞,并沒有得到W3C的認可。并且經常被開發人員濫用,制造出一大堆不符合真正的Web标準的JavaScript腳本和HTML标記,常常隻能運作在某種特定的浏覽器中(主要是IE)。

DHTML總是過于注重各種花哨的視覺效果,而Ajax最關注的問題則是真正改善Web應用可用性,這正是Ajax技術誕生的使命,甚至也正是JavaScript腳本語言誕生的使命。跨浏覽器自然是Web應用可用性的重要組成部分,隻有基于真正的Web标準來做開發,才有可能跨浏覽器為使用者提供一緻的互動體驗。而跨浏覽器僅僅是基于真正的Web标準做開發的一個原因。另外一個原因是,唯有這樣,才能充分地利用Web标準發展的成果(例如上述的SVG、E4X等符合标準的技術),并且建造出向後相容的Web應用。向後相容的意思就是我們今天建造的Web應用,當明天使用者都使用浏覽器的新版本(例如IE 7.0)之後,不必再加以修改就能直接運作在這些新版本之上。這樣可以降低Web應用的維護成本,并且可以真正達到改善可用性,使使用者獲得更好的互動體驗的目标(想想看,假設使用者将自己的浏覽器更新為IE 7.0,并且通路一個她過去經常去的網站,突然發現網站的某個功能失效了,她會有什麼感覺?)。做過多年Web開發的開發者都知道,以前專門為IE5.0開發的Web應用,尤其是使用了很多JavaScript的應用,不加以修改和重新測試就運作在IE6.0上幾乎是不可能的。在這裡就是沒有做到向後相容。Ajax技術會使得這些問題都不再存在。

Ajax技術有兩個推動力,Web标準的成熟和軟體互動設計和可用性理論的成熟。在軟體的可用性方面,除了一些通用的軟體可用性和互動設計理論之外(這方面的經典著作包括《面向使用的軟體設計》、《About Face 2.0》中文版等等),Web應用的可用性(Web usability)也是國外非常熱門的一個研究領域,主要側重于研究如何提高Web應用的可用性。美國在這個領域有着非常深入的研究,并且對于一些公共機構網站的可用性還有相關的法律條款來限制(Section508,508條款,于2001年6月21日成為美國的法律,直接影響了聯邦部門和一些代理機構,還有為他們服務的網頁設計師。這條法律也适用于政府投資項目和任何采用了該法律的州)。對于這些網站,如果無法達到條款上的一些可用性要求,網站經營者就違法了。如果是開發公司無法達到這些要求,就别指望從聯邦政府手中拿到這些項目。

為了對如何提高Web應用的可用性做出指導,W3C在20世紀90年代建立了Web Accessibility Initiative(WAI),緻力于為網站建造者提供實作可通路性(與可用性同義)的方法和政策([url]http://www.w3.org/WAI/GL/[/url])Web可用性方面的經典著作包括《網站重構》。

綜上所述,可以認為Ajax就是Web标準和Web應用的可用性理論的集大成者。它極大地改善了Web應用的可用性和使用者的互動體驗,最終得到了使用者和市場的廣泛任何。是以可以說,Ajax就是使用者和市場的選擇。

目前Ajax已經成為了Web應用的主流開發技術,大量的業界巨頭已經采納并且在大力推動這個技術的發展。最近的動态包括:

1. IBM、Oracle、Yahoo!、BEA、RedHat、Novell等頁界領先的公司啟動了Open Ajax項目。緻力于為Ajax開發建造先進強大的的開發工具。IBM在2月底已經釋出了Open Ajax項目的Ajax Toolkit Framework(ATF)1.0,是一個基于Eclipse IDE的Ajax開發工具。

2. 微軟開發了自己的Ajax架構Altas,不過主要是和伺服器端他們自己的ASP.NET架構配合工作。

3. Sun雖然行動遲緩,但是也将Ajax技術列入了J2EE的blueprint(藍圖)中,作為J2EE技術的有益的補充。

除了上述這些公司之外,Google公司不可不提,因為正是他們率先采用Ajax技術建造出了一大堆非常出色的應用,才将Ajax技術引到了聚光燈下。Google公司建造的Ajax應用包括Google Maps、GMail、Google Suggest等等,其中公認最優秀最複雜的Ajax應用是Google Maps。由于完全基于Ajax技術來建造Google Maps的界面,Google Maps提供了遠遠超越其競争對手的地圖服務的互動體驗。如果說Google背景的地圖技術并不存在巨大優勢的話,那麼Ajax技術和優秀的互動設計成為了他們壓倒競争對手的最後一根稻草。最終使得Google Maps脫穎而出,獲得了使用者的青睐。

我們可以對比一下微軟前後的兩個地圖服務就可以看出差别。

微軟公司所提供的舊的地圖服務:[url]http://terraserver.microsoft.com[/url]。是傳統Web應用的代表,性能很差而且極其難用。

微軟公司所推出了新的地圖服務:[url]http://local.live.com/[/url]。新的地圖服務包括這個網站上的很多其他服務完全基于Ajax技術來建造,獲得了極好的可用性。這個地圖可以看作是在Google推出了Google Maps服務之後,微軟公司痛定思痛的産物,在很多地方模仿了Google Maps。

Ajax的典型應用除了Google Maps,還有微軟的Windows Live、Yahoo!的Flickr等等。此外國内新浪的blog也使用了一些Ajax的技術。

銘銘 收集

資料來源: Ajax技術開發應用

繼續閱讀