Date: 2006-07-26
撰述者 Robert Eckstein Labels: Tech
Q:您在AJAX實戰一書中,提到AJAX的4項定義原則。可否請您詳細說明,順便談談AJAX概念的豐富用戶端。用戶端該輕薄或厚重似乎沒有定論。過去十年裡,我們學習到那些事情?還是說沒有任何人都通用的魔力公式?
這四項原則是:
1.瀏覽器包含的乃是應用程式,而非內容
2.伺服器傳遞的是資料,而非內容
3.使用者與應用程式的互動可以是流動且持續進行的
4.這是真正的編碼並需要規則
一般來說,我們努力想破除對既有網頁模型的看法。不要將伺服器看做積存內容的地點,而是單純提供資料的地點。事實上,有些人說過,現在已經可把伺服器端的網頁想像為一種網路服務,它可以非同步地釋放出讓用戶得以與之互動的資料。切記,這種互動並不一定得被打斷。
換句話說,我們不需要將整個網頁回貼檢查有沒有新的訊息。我們可以向伺服器送出一項要求,並更新網頁上的一個元件。現在看來,後設重新整理(meta-fresh)已經是過往的事了。這也是為何使用者可以擁有持續、無間斷的網頁經驗。
Gmail替你將電子郵件草稿自動儲存的方式,就是一個絕佳的例子。過去使用電子郵件應用程式的時候,瀏覽器經常會出現錯誤,只好把錯誤的視窗關閉,結果你的資訊和進行中的工作就流失了。伺服器簡便的自動儲存功能,讓很多人不再氣到想把自己的頭髮扯光!
至於輕薄或厚重的用戶端,你必須認真衡量一下使用者的預期是什麼,而且從相反的角度設想他們因此要負擔的成本有多大。舉例來說,簡單的自動完成控制功能,可以讓你的使用者省去很多輸入的麻煩,而在伺服器上,你所獲得的資料也比較精確。大家會很容易就想要在網頁上增加使用者功能性,讓自己在多個方面都獲得助益。
然而,使用AJAX並不表示你可以忘卻所有的既有原則。任何一位軟體工程師能做的事,頂多就是把一項控制功能用AJAX來驅動,而將double combo轉換為AJAX、增加自動完成控制功能,或者增加即時搜尋功能。有一次,有一個人告訴我說她在應用程式上新增了一項自動完成控制功能,她的老闆因此賞她一筆獎金,因為工作變得更簡單了。像這樣簡單的事其實會造成很大的不同。
Q:請大致跟我們講一下使用AJAX內容的網路應用程式,它的理想伺服器端架構為何。
A:伺服器端的工程師,應該要知道一件事,也就是伺服器並無法分辨,傳統式的回貼和XMLHttpRequest物件所做的要求,兩者之間有何不同。相同的法則都全部適用。只要工程師先認知到這一點,其他都不是大問題。AJAX的不同之處在於它並不是將整個網頁提供回去。AJAX其實是送回XML和字串。這些字串可以是單純的文字、HTML元件、JSON(JavaScript物件記號)……或甚至是長短音組成的摩斯密碼。
令人擔心的是有很多剛剛接觸伺服器端的工程師,並沒有執行資料驗證的基本規則。我曾看過一些例子,工程師直接由用戶端,使用有效的參數,直接連結至資料庫,而沒有查證其中是否被植入了SQL或JavaScript。相信我,如果你星期一一大早喝著咖啡,準備開始一天的工作,卻發現你桌上原本的100,000列資料不見了,你一定會昏倒。而你還得跟老闆解釋咧!因此,我認為完美的伺服器端的架構,應該要將資料的驗證作為第一個步驟!
我在各地演講上課時,常常有人問我:「我該使用XML嗎?因為,AJAX中的X代表的不就是XML嗎?」這個問題的答案,從伺服器的角度來看,端看你作為工程師覺得何者較為適當。另外一個因素則取決於用戶端該如何處理資料。如果你已經擁有XML的網路服務,那你就應該加以使用,並將XML回應轉換為用戶端上正確的顯示輸出。然而,如果你需要將簡單字串送回的話,你在用戶端已經有回應文本(responseText)了,何必又要使用XML呢?
這方面我的簡單法則是:不要過度處理資料。如果你必須將伺服器上的資料,以單一格式進行迭代(iterate),然後在用戶端以另一格式,再次將資料進行迭代,這種作法並不會有任何額外的益處,你的資料處理方式還很可能會出錯。我最喜歡的技巧是運用回應文本上JavaScript字串的split()指令。我將一個陣列中的資料預備好在一行內來使用。不需要循環。同樣的方法也可運用在JSON上。我使用eval()指令,就可以準備好資料。別自找麻煩。
這種方法也可用在伺服器端上嗎?當然。有很多的伺服器端框架,都已經內建了AJAX功能。企業認為這是很重要的作法,所以他們不想落後給別的企業。我則認為這樣可以讓工程師擁有更多新增的特色與功能。
Q:作為Javascript和Java技術的工程師,我要怎麼著手使用AJAX?
A:這是很常見的問題,很多人常常在JavaRanch.com網站、我的部落格、或電子郵件裡,問我這個問題。真正簡單的解決方法是去找看看,哪本書、哪個網站、哪場會議或哪個使用者團體,曾經討論過AJAX的基本原理。我目前看到工程師有一個大問題,就是他們不瞭解AJAX背後的原理和實際運作的情形。我知道大家都想立刻看到成果,但是知道其中暗藏的玄機也是很重要的事。
讓我打個比方。想像你看到一台或許是有史以來速度最快的車子,要價百萬美元,那是你的美夢成真。單從外觀來看,這台車可以實現你所有的夢,於是你就舉債、賣了房子,睡在辦公桌下的小空間裡,然後買了這台車。結果在一個大熱天裡,你坐在沒有空調和電動窗戶的皮革座位上,車子啟動後隆隆作響。你一心一意就是要軋一下這部車。結果,天阿!這車從0到5英里竟然花了60秒,這時你才發現在引擎蓋下面,它裝的是一具緩慢無比又軟弱無力的引擎。
我看到大家相繼轉向AJAX、卻不管他們所追求的是什麼工具,心裡想到的就是這幅景象。在AJAX實戰中,我們給你的是用來建立成功應用程式的必要材料。你可以把你車子上的小引擎拆掉,換裝一部真正的馬達。這樣你的車才能看起來很快、很酷,速度也會如你所願。
那麼你需要知道什麼?不要使用瀏覽器偵測功能,而應該使用物件偵測功能。你也應該使用物件導向的JavaScript,並學習如何讓你的程式碼可重複使用。所以,快去找書看看、找一個好的網站,或者參加我所主講的研討會。你可以查看我的行事曆,看什麼時候有研討會。
Q:謝謝你,Eric。祝你一切順利。
A:謝謝。
-全文完-
--------------------------------------------------------------------------
「我看到目前的工程師有一個大問題,就是他們不瞭解AJAX背後的原理和實際的運作情形。我知道大家都想立刻看到成果,但是知道其中暗藏的玄機也是很重要的事。」
Eric Pascarello,
AJAX實戰的共同作者
--------------------------------------------------------------------------
【原文連結】
0 Comments:
Post a Comment