譯者:本文是世界上第一篇關于ajax系統性介紹。作者通過這篇文章創造了"ajax"(阿迦克斯)這個詞。

在現在的互動性設計中如果有一種能夠被稱為"迷人的",那一定是web 應用軟件。除此之外,我們最后一次聽到有人為某個(不處于Web之上的)交互式設計而傾倒是在什么時候?(ok,除了ipod)所有夠酷,富有創意的新設計都是在線的。
盡管如此,Web交互設計者仍不能不對開發桌面軟件的同僚們感到一絲妒忌。桌面應用軟件有著豐富而及時的響應,相對于此,在Web之上程序似乎遙不可及。同樣的情況也隱含在web快速增長的應用之中,它在我們能夠實現的用戶體驗以及用戶已經從桌面應用程序中獲得的體驗之間產生了隔閡。
目前這種隔閡正在被打破。看看google建議(Google Suggest)。當你敲上一個新詞時,建議的詞匯幾乎是立即出現的。再看看Google Maps,使用你的鼠標抓取地圖并稍稍移動,再移動,一切都會立即出現,而不需等待頁面刷新。
Google Suggest和Google Maps是這種新實現途徑的2個例子,在Adaptive Path我們稱之為Ajax。這個名字是異步JavaScript+XML的縮寫。它代表了一種在web之上可能實現的基本方式。
定義Ajax:
Ajax并不是一項技術。它實質上是用一種強大的新方式結合在一起的一系列技術集,其中的每一項技術都在他們自己的領域里面相當流行。Ajax包括:
·使用XHTML和CSS創造基于標準的呈現;
·使用文檔對象模型(DOM)的動態響應與交互;
·使用XML和XSLT進行數據數據交互和處理;
·使用XMLHttPRequest進行異步的數據檢索;
·使用javascript綁定一切;
經典的
web應用模型是這么工作的:在界面上的大多數用戶操作都能觸發一個http的請求傳回web服務器。服務器進行一些處理--檢索數據,處理數據,與其他
的早期系統進行交互--然后傳回一個http頁面返回客戶端。這個模型是根據Web最初的超文本鏈接方式編寫的。但是作為《The Elements
of User Experience》的fans,我們知道,讓web與超文本高效融合的實現方式與編寫好的軟件應用并無直接聯系。

圖片1:傳統的web應用模型(左)與Ajax模型的對比(右)
這個實現方式很有技術上的感覺,但它無助于創造更好的用戶體驗。當服務器在做這些事情的時候,用戶在干什么?沒錯,是等待。而在這項任務里面的每一
步,用戶都要等待若干時間。顯然,如果我們要從頭設計一個符合要求的web應用,我們不能讓用戶這么一直呆呆地等著。頁面裝載完成后,為什么一旦應用程序
需要從服務器上獲取數據時,都要讓用戶中斷他們的交互?事實上,為什么要讓用戶看到這個(應用程序與服務器的)交互過程?
Ajax有什么不同?
一個Ajax應用程序通過在用戶與服務器之間引進一種稱為Ajax引擎的中間媒介,能夠從根本上消除這種開始-等待-開始-等待的web交互過程。這聽起來象是往程序里面添加一個抽象層(layer)而讓它更少地作出響應。但事實并不如此。
在開始一個會話(session)時,瀏覽器加載Ajax引擎——用javascript編寫并通常位于一個隱藏的frame中--以取代加載
web頁面。這個引擎同時負責為用戶看到的界面進行描述以及響應用戶的請求并與服務器進行交互。Ajax允許用戶與服務器進行異步的交互--獨立于服務器
的通訊。因此用戶就不必一直呆呆地盯著一個空白的瀏覽器窗口和沙漏圖標,等著服務器做后面的事。

圖片2:傳統web應用的同步交互模式(上面)與Ajax應用的異步交互模式(下面)
用戶的每個動作通常都會產生的http的請求被javascript傳向Ajax引擎的調用取代了。任何關于用戶動作的響應并不都需要傳回服務器
——比如簡單的數據驗證,在內存中修改數據,甚至包括一些導航——引擎能夠自己處理這些。如果引擎需要一些要從服務器獲得響應的東西——比如提交數據進行
處理,加載額外的界面代碼,或檢索新的數據,引擎能夠讓這些請求異步地發送,這通常使用XML,且無需用戶停止它們與應用程序的交互。
誰在使用Ajax?
Google在完善Ajax上投入巨大。所有Google去年發布的主要產品——orkut,Gmail,最新beta版的Google
Groups,Google Suggests,Google
Maps——都是Ajax的應用。(想獲得更多有關Ajax實現的具體細節,可以參考這些關于Google Groups,Google
Suggests和Google Maps的經典分析)其他的還包括以下這些:在Flickr上許多人們喜歡的特性是通過Ajax實現的,Amazon的A9.com搜索引擎也使用了同樣的技術。
這些項目表明Ajax并不只是一種技術層面的論調,同時也是現實中具有實踐意義的應用。這并不是某種只存在于實驗室的技術。Ajax應用可以是任何形式,從非常簡單的,單函數的Google Suggest到非常復雜尖端的Google Maps。
在Adaptive
Path,過去的幾周里我們一直在使用Ajax,同時我們意識到我們對Ajax所能實現的豐富的交互能力以及響應只是淺嘗輒止。對于web應用而
言,Ajax是一種重要的進展,同時它的重要性剛剛顯示出來。已經有很多的開發人員知道如何使用這些技術,我們期望能有更多的團體在實現更有競爭力的
Ajax應用上緊跟Google的腳步。
展望未來
Ajax應用上最大的挑戰并不是來自于技術。Ajax的核心技術已經是成熟,穩定,且易于理解的。相對的是,真正的挑戰在于這些應用程序的設計者們:如何忘記我們所想所知的一切有關web的局限,并同時開始想象更大更寬廣的可能。
這將會很有趣。
Ajax Q&A
自從我們發表了Jesse的論文后,我們收到大量讀者咨詢Ajax問題的信件。在以下的Q&A部分,Jesse回答了一些最常見的問題。
Q. 是Adaptive Path發明了Ajax嗎?還是Google?亦或是Adaptive Path幫助google實現了這些Ajax應用?
A. Adaptive Path與Google都沒有創造Ajax。Google最新的產品只不過是Ajax技術的一些兒鮮明的使用例子。Adaptive Path并不只是參與了Google關于Ajax引擎的應用。我們還為一些其他的客戶開發Ajax作品。
Q. Adaptive Path在販賣Ajax組件或注冊了Ajax這個名字嗎?我從哪里可以下載它?
A. Ajax并不是某種你能夠下載到的東西。它實際上是一種途徑——一種你用來思考如何使用特定技術建立web框架的方式。Adaptive Path并不擁有Ajax名字和技術的所有權。
Q. Ajax是XMLHttpRequest的別名嗎?
A.
不是的。XMLHttpRequest僅僅只是Ajax這個技術集合中的一部分。XMLHttpRequest這個技術組件讓異步的服務器通訊稱為可能。
Ajax這個名字的由來在我們的文章里已經有詳細的描述,它并不只依賴于XMLHttpRequest,還有CSS, DOM等等其他的技術。
Q. 為什么你覺得有必要取這么一個名字?
A. 當我與客戶討論這個實現方法的時候,我需要某個比"異步的JavaScript+CSS+DOM+XMLHttpRequest"更簡短的名字。
Q. 異步服務器通訊技術已經存在很多年了。為什么說Ajax是一種"新的"實現方式?
A. Ajax是一種在現實中能夠改變基本web交互模型的新的且顯著的技術使用方式。Ajax之所以這么迷人是
因為這些公司明白如何最高效地使用它們從容地進行開發。
Q. Ajax是一種技術平臺還是一種架構風格?
A. 兩方面都是。Ajax是以某種特殊方式使用的技術合集。
Q. 最適合Ajax的是哪種應用?
A. 我們也還不清楚。這是一種互相關聯的新的實現途徑。我們對什么是Ajax最佳應用的理解仍處于初級階段。有時傳統的web應用模型仍是某些問題的最佳解決方案。
Q. 這意味著Adaptive Path是flash的反對者嗎?
A.
沒有的事。Macromedia也是我們的一個客戶。而且我們長久以來一直支持flash技術。當Ajax技術成熟之后,我們希望它有時在某些問題上是一
個更好的解決方案,有時flash則會是更棒的那個。我們同樣對尋找融合兩種技術的途徑很感興趣。(就Flickr而言,他們就同時使用了這兩種技術)
Q.Ajax有明顯的可訪問性或瀏覽器兼容性的局限嗎?Ajax應用會破壞后退按鈕的功能嗎?Ajax能夠與重置功能(REST)兼容嗎?對于Ajax的發展有沒有需要進行安全性的考量?對討厭javascript的用戶,有沒有使用Ajax的可能?
A.所有對這些問題的回答都是"有可能"。許多的開發者已經在尋找定位這些問題的方式了。但我們認為,要確定Ajax的所有局限,仍有很多工作要做。同時我們期待Ajax的開發社區能夠發現更多的這類問題。
Q.你引用的一些Google的例子完全沒有使用XML。在一個Ajax應用里面,我都必須使用XML或XSLT嗎?
A.XML是Ajax客戶端獲取及發送數據的一個相當成熟的方式。但沒有任何理由限制你不能使用一些象javascript object notation之類結構化數據交互技術來實現相同的功能。
Q. Ajax應用會比傳統的web應用程序更容易開發嗎?
A. 這不一定。Ajax應用不可避免地需要在客戶端運行復雜的javascript代碼。讓這些復雜的代碼高效且無錯誤地運行并不是一件容易的事。我們同樣需要一些更好的開發工具或架構來迎接這些挑戰。
Q. Ajax應用程序一定會比傳統的web應用程序具有更好的用戶體驗嗎?
A. 這不一定。Ajax賦予了交互設計者們更多的靈活性。然而,我們擁有越強大的能力,在運用中我們就會有更多的細節需要關心。在我們的應用程序中我們一定要更加謹慎地使用Ajax來增強用戶體驗,而不是削弱它。
轉自: http://hi.baidu.com/jantouy/blog/item/c7aed9fa5cdedad9b58f312b.html