1、XMLHttpRequest的有效性
Ajax開(kāi)發(fā)者面對的一個(gè)最大問(wèn)題是當XMLHttpRequest不可用時(shí)如何反應。雖然大部分現代瀏覽器支持XMLHttpRequest,但還是有少量的用戶(hù),他們的瀏覽器不能支持,或由于瀏覽器安全設置而阻止對XMLHttpRequest的使用。若你的Web應用發(fā)布于公司內部的Intranet上,你很可能可以指定支持哪種瀏覽器,并可以確保XMLHttpRequest是可用的。若你在公共WEB上發(fā)布,則你必須意識到由于假定XMLHttpRequest是可用的,所有就阻止了老瀏覽器、手持設備瀏覽器等等用戶(hù)來(lái)使用你的系統。
然而,你應該盡力保證應用系統“正常降級”使用,在系統中保留適用于不支持XMLHttpRequest的瀏覽器的功能。在購物車(chē)例子中,最好的方法是有一個(gè)Add to Cart按鈕,可以進(jìn)行常規的提交處理,并刷新頁(yè)面來(lái)反映購物車(chē)狀態(tài)的變化。Ajax行衛可以在頁(yè)面被載入時(shí)通過(guò)JavaScript添加到頁(yè)面中,只在XMLHttpRequest可用的情況下,為每個(gè)Add to Cart按鈕加上JavaScript處理函數。另一個(gè)方法是在用戶(hù)登錄時(shí)檢測XMLHttpRequest,再決定是提供Ajax版本還是常規基于form提交的版本。
2、可用性考慮
圍繞著(zhù)Ajax應用的大部分問(wèn)題都是很普通的問(wèn)題。例如,讓用戶(hù)知道他們的輸入已經(jīng)被注冊并處理,是很重要的,因為在XMLHttpRequest處理過(guò)程中并不能提供通常的漏斗旋轉光標。一種方法是將“確認”按扭上的文本替換為“正在更新中…”,以避免用戶(hù)在等待響應時(shí)多次點(diǎn)擊按鈕。
另一個(gè)問(wèn)題是,用戶(hù)可能沒(méi)有注意到他們正在觀(guān)看的頁(yè)面已經(jīng)被更新??梢酝ㄟ^(guò)使用各種視覺(jué)技巧來(lái)將用戶(hù)的眼光吸引到頁(yè)面的更新區域。還有一個(gè)問(wèn)題是通過(guò)Ajax更新頁(yè)面打斷了瀏覽器“退回前頁(yè)”按鈕的正常工作,地址欄中的URL不能反映頁(yè)面的全部狀態(tài),并且不能使用書(shū)簽功能。參見(jiàn)Resource章節中列出的網(wǎng)站地址上的文章來(lái)了解更多Ajax應用關(guān)于可用性方面的問(wèn)題。
3、服務(wù)器負載
使用Ajax界面代替傳統的基于form的界面可能戲劇性地增加傳遞到服務(wù)器的請求數量。例如,一個(gè)普通的Google搜索給服務(wù)器造成一次命中,并在用戶(hù)確認搜索表單時(shí)發(fā)生。然而,Google Suggest,將會(huì )試圖自動(dòng)完成你的搜索詞,在用戶(hù)打字時(shí)將會(huì )往服務(wù)器發(fā)送多個(gè)請求。在開(kāi)發(fā)一個(gè)Ajax應用時(shí),要注意到你將會(huì )發(fā)送多少請求到用戶(hù)器端,以及服務(wù)器的負載指標。你可以通過(guò)在客戶(hù)端適當地緩存請求、與服務(wù)器響應來(lái)緩減負載壓力。你也應該在設計Ajax應用時(shí)盡量在客戶(hù)端處理更多的邏輯,而不用與服務(wù)器端通訊。
4、處理異步
一定要記住,沒(méi)有任何東西可以保證XMLHttpRequest將會(huì )按照它們被發(fā)送的順序來(lái)依次結束。實(shí)際上,你在設計系統時(shí),腦子里應該始終假定它們不會(huì )按原來(lái)順序結束。在購物車(chē)例子中,使用了一個(gè)最后更新的時(shí)間戳來(lái)保證最新的數據不會(huì )被改寫(xiě)。這個(gè)非?;镜姆椒梢栽谫徫镘?chē)場(chǎng)景中工作,但可能不能在其它情況下工作。在設計時(shí)刻就要考慮你該如何處理異步服務(wù)器響應。
結論
你現在應該對于A(yíng)jax的基本原則有了一個(gè)良好的了解,另外,你應該理解一些更高級的隨Ajax方法而來(lái)的設計問(wèn)題。創(chuàng )建一個(gè)成功的Ajax應用需要一系列的方法—從JavaScript UI設計到服務(wù)器端架構—但是你現在應該已經(jīng)具備了需要使用到的Ajax核心知識。
聯(lián)系客服