AJax到底是什麼?是一個並不太容易掌握,但可以增加網站交互性的方法?是Web2.0的基石?還是又一輪網絡開發中的跟風?就像以前流行過的閃爍字體、“濺水”頁(譯者:Splash page -Flash動畫或大圖片做的網站的簡介首頁,往往有個“跳過簡介”或“直接進入”的小按鈕)、和使用圓角(譯者:見YeeYan首頁抬頭,呵呵),只是這次動態性更強?
讓我們看看有關AJax的幾個誤區,撥開迷霧、發掘真相。
誤區一:AJax 是Asynchronous JavaScript and XML 的縮寫。你寫這個詞時,應該用大寫字母拼寫,要不就顯得很無知。
事實上,根據 Ajax 這個詞的 創造者Jesse James的介紹,AJax可不僅僅是個縮寫詞。它是一系列技術用特定方式結合在一起的整體。它包括Javascript,CSS, DOM 和運用 XMLHttpRequest 對象進行客戶端與服務器間的數據傳輸。從服務器傳到客戶端的數據格式不一定是XML,還可以是 JSON(Javascript 中的對象)或其他數據格式。總之數據的傳輸是少量、遞增的(譯者:而不是傳統的刷新整個頁面)。所以,你要是想顯擺一下自己是很懂的技術高手,用Ajax,而不是AJax。您自己判斷是不是想顯擺自己吧。
誤區二:看看Gmail和Google Map吧,AJax 會讓你的網站可用性更強。
事實上,使用Ajax 有可能讓你的網站可用性增強,但也可能使你的網站變得讓人可憎得難用。全新設計的Yahoo 電視節目列表就是這樣一個 反面教材。(譯者:對新版Yahoo電視節目列表的反面評價主要認為AJax的翻頁功能讓原來一頁上列出所有電視節目的可用性變得更差,比如不能在一頁中進行查找等,雖然翻頁功能本身做得很漂亮。)
誤區三:AJax只是面子工程--僅僅是表面上看著挺酷和視覺效果。
事實上,如果有正確的設計和實施,AJax 的網絡應用應該比傳統的CGI類型的,以服務器端處理為主體的(如ASP.Net或Java Server Pages,JSP)網絡應用具有更好的可擴展性,和讓用戶體驗到更快的反應速度。如需要了解技術細節,請參見IBM的Bill Higgins寫的 有關AJax和REST的第一部分(譯者:歡迎翻譯本文)。這是我的總結:傳統的CGI類型的,以服務器端處理為主體的網絡應用,客戶端不保存(網絡應用執行的)狀態(Stateless),狀態的保存完全由服務器實施(Stateful server)。這使得服務器產生的結果(譯者:比如動態從數據庫讀取的數據)只能一次性使用而不能被緩存(cache)下來再利用。這破壞了REST構架中的可擴展性原則。而AJax能將狀態保存在客戶端,從而實現常用資源,如重復使用的數據和源程序(譯者:應該是指Javascript),可以有效被緩存和再利用。
誤區四:AJax 對於一般網絡開發人員很難掌握
Ajax 確實不容易。但它的使用難度正在逐步降低。有若干因素造成Ajax的實施難度:對不同浏覽器兼容性的支持,開發工具的不足,以及對開發人員思維方式轉變的要求--從過去以服務器端處理為主體的網絡應用,轉變到新的在客戶端保存狀態、逐步上傳數據的應用。但由於Ajax越來越普及,很多開發工具和平台提供商以及開源軟件開發者都在著力解決這一問題。這裡列出若干對AJax開發員有用的工具:Google 網絡開發工具箱(給Java開發員的),dojo跨浏覽器平台,script.aculo.us 長於提供視覺效果,以及用來調試JavaScript 程序、監視XMLHttpRequest的(Firefox插件)Firebug,等等。
誤區五:Ajax 會破壞用戶使用浏覽器的體驗(AJax breaks the browser model)
確實,Ajax的應用有可能造成浏覽器使用的問題,如破壞“返回鍵” 功能,讓用戶不知所以,讓有殘障的用戶完全無法使用網站。但傳統技術也可能產生類似問題:如使用框架(frames)或者Flash往往也會破壞“返回鍵” 功能;即便不用AJax,糟糕的設計也能讓一個網站把用戶完全搞暈;即便使用最單純的Html也很難做到讓有殘障的用戶順利使用網站。這些是需要有意識地去注意和學習的方面,並不是僅存在於AJax應用中的問題。
誤區六:AJax 是web2.0的關鍵組成部分
這要看你如何定義web2.0了。我認為web2.0和web1.0的區別主要在於社會層面而不是技術層面。從web1.0 到web2.0最重要的范式轉變(paradigm shift)在於web2.0是雙向的網絡,可讀寫的網絡和社會網絡。而不是“讓我們開家網上商店”的那個網絡。按照這個定義,我們可以完全不用Ajax來實施web2.0。大多數博客不用Ajax;沒有Ajax,維基百科照樣能煥發它的異彩;社會化網絡也不需要AJax;Flickr 之所以吸引人是因為它是一個照片的社會化平台,而不是它使用的DHtml技術。