2007年7月10日 星期二

何謂Ajax?傑森淺談Ajax

Frank:
看完這篇文章之後,我總算對 Ajax 有點概念了,網路中的名詞總是不斷的在增加,幾個舊東西合起來又是一新名詞。
這陣子貼了不少篇有關Ajax的文章,迴響比想像中還熱烈!

不過有些回應,依然讓傑森有些哭笑不得。其中傑森最在意的,就是不少人到了現在,還在問:Ajax是什麼?
##CONTINUE##
嗯,想想還好,這只是小事,真的不用太在意!在我們技術人員群體中,Ajax就算你不學,多少也知道它,至少,知道某些知名網站用了這個技術,如Google Map、Yahoo suggest。

一般網路使用者,並不在乎這些繞舌的技術,但是,網站的瀏覽經驗,他們卻是會深深記住的!這才是重點。

Web 2.0和Ajax常常被綁在一起,這是很容易理解的:Web 2.0最大的宗旨,簡單的說,就是提昇網站瀏覽者的使用經驗,而Ajax就是做到這個目的最受注目的技術。(請注意,不是唯一!Flex也是很凶的。)

Ajax是Asynchronous Javascript and XML(非同步Javascript與XML)的縮寫,說實在的,有誰能在不瞭解這個技術前,猜出它的字面上的意義,就算你狠了^^

若要堅持從字面上去翻譯,也行,就叫做:利用Javascript的技術,非同步的讀取、分析XML的資料,並且表現在網頁裡。

很難懂嗎?不會的。傳統的網頁,我們點了任何一個連結,或是送出一個表單,接下來就是無盡的等待,等待資料送到主機,再等它回應,這段期間,訪客啥事也不能做,不然,很可能讓過程出現錯誤。

這樣的瀏覽經驗當然不是很順暢的。不過,這樣的情況,也持續了10來年,幾乎所有人都習以為常,甚至認為,上網站看網頁就是這樣囉!

那可不!這在一些有抱負有理想的程式開發人員眼中,是不可原諒的缺失!所以一直以來,很多程式人展現了自我的編程功力,努力讓瀏覽的過程「看起來」變起順暢。

像是按下送出按鈕後,出現「Loading」的小動畫,提醒訪客不用心急;另外,iframe的應用也很頻繁,利用它我們可以在一個頁面裡載入多個頁面,而且頁面之間還能有互動,當它們在背後暗中進行時,呈現出來的效果可是很神奇的!

這段時間,這些應用的方法並沒有什麼準則,iFrame、各種Javascript語法、再配合複雜到不行的CSS樣式,大家玩得不亦樂乎。直到Jesse James Garrett發表了Ajax,大家慢慢有了方向。

最著名的例子,就是Google Map了。最近它也加入了台灣的詳細圖資,另一套本土的Urmap的神經可能要緊繃一些了。

如果大家還有印象,3,5年前的網路地圖,一定會有上下左右的按鈕,你按個鈕,就換個畫面,等你找到你要的地方,約會可能都遲到了!

Google Map和Urmap可不用這樣,你直接在地圖上用滑鼠拖曳,地圖就跟著移動,按右鍵,還能定義起點終點,甚至還能即時畫出路線規畫給你看!這,就是Aajax。

其實Ajax說穿了,最重要的只有XMLHttpRequest物件,傑森不在這裡多做介紹,簡單來說,就是靠它來和Web server要求xml資料,而不用透過「換頁」或是「重新載入」,所以訪客也不用「等待」資料的回傳,這段回傳的時間,大可進行頁面上的其它操作。

維基百科上也說明了Ajax的優點:

AJAX應用可以僅向伺服器發送並取回必需的數據,它使用SOAP或其它一些基於XML的頁面服務介面,並在客戶端採用JavaScript處理來自伺服器的回應。
因為在伺服器和瀏覽器之間交換的數據大量減少(大約只有原來的5%),結果我們就能看到伺服器回應更快的結果。同時很多的處理工作可以在發出請求的客戶端機器上完成,所以Web伺服器的處理時間也減少了。

當然,資料拿回來了,還要進行處理;過去,如果使用php、asp等技術,這些工作,大多會在伺服器處理,最後把結果傳送回訪客的網頁中,現在全都由Javascript來做這些事了,它的工作一下子變重了好幾倍。

當然,這也意味著,網站程式的編寫,面臨了一個不小的革命。事情的發展當然沒有那麼順利。

維基百科中提到這種情況的四大問題:

第一,JavaScript語言本身之能力可能不足以處理複雜的邏輯。

第二,JavaScript的執行效能一向不好。

第三,JavaScript存取伺服器數據,仍需適當的伺服器端程序之配合(如php、asp等)。

第四,瀏覽器相容性的問題又出現。

還好,隨著大家拚命使用Javascript,第一個問題愈來愈小;而第二個問題,也會隨著電腦設備的更新而消失.

第三,則是真正的問題,是的,Ajax是來亂的,它不能幫開發人員省掉工作,只會增加工作量=.=

第四個問題,基本上過去存在,現在存在,在可見的未來也會存在,我們只好鼻子摸摸,認了!還好,這些不相容的規則,也大多被摸索出來了,大致上只是煩一點,並不會造成太大的困擾。

另外,真正要重視的問題是,Ajax要寫一個完整的網站,並不容易,最主要的原因,就是它沒有一套完整的開發系統,幾乎要靠程式人員一字一血淚的key出來!

所幸,這個問題,這一兩年開始有了一些改變。網路上已經出現不少所謂的「Ajax套件」,知名的有:prototype、JQuery、YUI,Microsoft也為它的.net搞了一套ASP.NET AJAX,而握有Dreamweaver王牌的Adobe也推出了Spry。

這些套件,除了幫助我們和後端接觸取得、分析資料,另外,也都很雞婆的寫了一堆「介面(Interface)」元件,讓我們可以輕易的發揮Ajax的優點,讓你想不用都很難。

使用這些套件也是有代價的:太簡單的你不用,複雜的,多達數百個API,讓你看了都頭昏!

至於要選哪一套,或是你的要自行一行行編寫、手工打造,只要結果你自己和業主都滿意,實在沒有什麼不可以!

來源:http://www.jasonshow.idv.tw/jasonshow/articleOne.php?aNo=41

沒有留言: