AJAX的優(yōu)缺點(diǎn)
文章出處:http://psychicreadingswithdeb.com 作者:興邦開(kāi)發(fā)部 人氣: 發(fā)表時(shí)間:2016年05月10日
(1).AJAX的優(yōu)點(diǎn)
<1>.無(wú)刷新更新數據。
AJAX最大優(yōu)點(diǎn)就是能在不刷新整個(gè)頁(yè)面的前提下與服務(wù)器通信維護數據。這使得Web應用程序更為迅捷地響應用戶(hù)交互,并避免了在網(wǎng)絡(luò )上發(fā)送那些沒(méi)有改變的信息,減少用戶(hù)等待時(shí)間,帶來(lái)非常好的用戶(hù)體驗。
<2>.異步與服務(wù)器通信。
AJAX使用異步方式與服務(wù)器通信,不需要打斷用戶(hù)的操作,具有更加迅速的響應能力。優(yōu)化了Browser和Server之間的溝通,減少不必要的數據傳輸、時(shí)間及降低網(wǎng)絡(luò )上數據流量。
<3>.前端和后端負載平衡。
AJAX可以把以前一些服務(wù)器負擔的工作轉嫁到客戶(hù)端,利用客戶(hù)端閑置的能力來(lái)處理,減輕服務(wù)器和帶寬的負擔,節約空間和寬帶租用成本。并且減輕服務(wù)器的負擔,AJAX的原則是“按需取數據”,可以最大程度的減少冗余請求和響應對服務(wù)器造成的負擔,提升站點(diǎn)性能。
<4>.基于標準被廣泛支持。
AJAX基于標準化的并被廣泛支持的技術(shù),不需要下載瀏覽器插件或者小程序,但需要客戶(hù)允許JavaScript在瀏覽器上執行。隨著(zhù)Ajax的成熟,一些簡(jiǎn)化Ajax使用方法的程序庫也相繼問(wèn)世。同樣,也出現了另一種輔助程序設計的技術(shù),為那些不支持JavaScript的用戶(hù)提供替代功能。
<5>.界面與應用分離。
Ajax使WEB中的界面與應用分離(也可以說(shuō)是數據與呈現分離),有利于分工合作、減少非技術(shù)人員對頁(yè)面的修改造成的WEB應用程序錯誤、提高效率、也更加適用于現在的發(fā)布系統。
(2).AJAX的缺點(diǎn)
<1>.AJAX干掉了Back和History功能,即對瀏覽器機制的破壞。
在動(dòng)態(tài)更新頁(yè)面的情況下,用戶(hù)無(wú)法回到前一個(gè)頁(yè)面狀態(tài),因為瀏覽器僅能記憶歷史記錄中的靜態(tài)頁(yè)面。一個(gè)被完整讀入的頁(yè)面與一個(gè)已經(jīng)被動(dòng)態(tài)修改過(guò)的頁(yè)面之間的差別非常微妙;用戶(hù)通常會(huì )希望單擊后退按鈕能夠取消他們的前一次操作,但是在A(yíng)jax應用程序中,這將無(wú)法實(shí)現。
后退按鈕是一個(gè)標準的web站點(diǎn)的重要功能,但是它沒(méi)法和js進(jìn)行很好的合作。這是Ajax所帶來(lái)的一個(gè)比較嚴重的問(wèn)題,因為用戶(hù)往往是希望能夠通過(guò)后退來(lái)取消前一次操作的。那么對于這個(gè)問(wèn)題有沒(méi)有辦法?答案是肯定的,用過(guò)Gmail的知道,Gmail下面采用的Ajax技術(shù)解決了這個(gè)問(wèn)題,在Gmail下面是可以后退的,但是,它也并不能改變Ajax的機制,它只是采用的一個(gè)比較笨但是有效的辦法,即用戶(hù)單擊后退按鈕訪(fǎng)問(wèn)歷史記錄時(shí),通過(guò)創(chuàng )建或使用一個(gè)隱藏的IFRAME來(lái)重現頁(yè)面上的變更。(例如,當用戶(hù)在Google Maps中單擊后退時(shí),它在一個(gè)隱藏的IFRAME中進(jìn)行搜索,然后將搜索結果反映到Ajax元素上,以便將應用程序狀態(tài)恢復到當時(shí)的狀態(tài)。)
但是,雖然說(shuō)這個(gè)問(wèn)題是可以解決的,但是它所帶來(lái)的開(kāi)發(fā)成本是非常高的,并與Ajax框架所要求的快速開(kāi)發(fā)是相背離的。這是Ajax所帶來(lái)的一個(gè)非常嚴重的問(wèn)題。
一個(gè)相關(guān)的觀(guān)點(diǎn)認為,使用動(dòng)態(tài)頁(yè)面更新使得用戶(hù)難于將某個(gè)特定的狀態(tài)保存到收藏夾中。該問(wèn)題的解決方案也已出現,大部分都使用URL片斷標識符(通常被稱(chēng)為錨點(diǎn),即URL中#后面的部分)來(lái)保持跟蹤,允許用戶(hù)回到指定的某個(gè)應用程序狀態(tài)。(許多瀏覽器允許JavaScript動(dòng)態(tài)更新錨點(diǎn),這使得Ajax應用程序能夠在更新顯示內容的同時(shí)更新錨點(diǎn)。)這些解決方案也同時(shí)解決了許多關(guān)于不支持后退按鈕的爭論。
<2>.AJAX的安全問(wèn)題。
AJAX技術(shù)給用戶(hù)帶來(lái)很好的用戶(hù)體驗的同時(shí)也對IT企業(yè)帶來(lái)了新的安全威脅,Ajax技術(shù)就如同對企業(yè)數據建立了一個(gè)直接通道。這使得開(kāi)發(fā)者在不經(jīng)意間會(huì )暴露比以前更多的數據和服務(wù)器邏輯。Ajax的邏輯可以對客戶(hù)端的安全掃描技術(shù)隱藏起來(lái),允許黑客從遠端服務(wù)器上建立新的攻擊。還有Ajax也難以避免一些已知的安全弱點(diǎn),諸如跨站點(diǎn)腳步攻擊、SQL注入攻擊和基于Credentials的安全漏洞等等。
<3>.對搜索引擎支持較弱。
對搜索引擎的支持比較弱。如果使用不當,AJAX會(huì )增大網(wǎng)絡(luò )數據的流量,從而降低整個(gè)系統的性能。
<4>.破壞程序的異常處理機制。
至少從目前看來(lái),像Ajax.dll,Ajaxpro.dll這些Ajax框架是會(huì )破壞程序的異常機制的。關(guān)于這個(gè)問(wèn)題,曾在開(kāi)發(fā)過(guò)程中遇到過(guò),但是查了一下網(wǎng)上幾乎沒(méi)有相關(guān)的介紹。后來(lái)做了一次試驗,分別采用Ajax和傳統的form提交的模式來(lái)刪除一條數據……給我們的調試帶來(lái)了很大的困難。
<5>.違背URL和資源定位的初衷。
例如,我給你一個(gè)URL地址,如果采用了Ajax技術(shù),也許你在該URL地址下面看到的和我在這個(gè)URL地址下看到的內容是不同的。這個(gè)和資源定位的初衷是相背離的。
<6>.AJAX不能很好支持移動(dòng)設備。
一些手持設備(如手機、PDA等)現在還不能很好的支持Ajax,比如說(shuō)我們在手機的瀏覽器上打開(kāi)采用Ajax技術(shù)的網(wǎng)站時(shí),它目前是不支持的。
<7>.客戶(hù)端過(guò)肥,太多客戶(hù)端代碼造成開(kāi)發(fā)上的成本。
編寫(xiě)復雜、容易出錯 ;冗余代碼比較多(層層包含js文件是AJAX的通病,再加上以往的很多服務(wù)端代碼現在放到了客戶(hù)端);破壞了Web的原有標準。
5.AJAX注意點(diǎn)及適用和不適用場(chǎng)景
(1).注意點(diǎn)
Ajax開(kāi)發(fā)時(shí),網(wǎng)絡(luò )延遲——即用戶(hù)發(fā)出請求到服務(wù)器發(fā)出響應之間的間隔——需要慎重考慮。不給予用戶(hù)明確的回應,沒(méi)有恰當的預讀數據,或者對XMLHttpRequest的不恰當處理,都會(huì )使用戶(hù)感到延遲,這是用戶(hù)不希望看到的,也是他們無(wú)法理解的。通常的解決方案是,使用一個(gè)可視化的組件來(lái)告訴用戶(hù)系統正在進(jìn)行后臺操作并且正在讀取數據和內容。
(2).Ajax適用場(chǎng)景
<1>.表單驅動(dòng)的交互
<2>.深層次的樹(shù)的導航
<3>.快速的用戶(hù)與用戶(hù)間的交流響應
<4>.類(lèi)似投票、yes/no等無(wú)關(guān)痛癢的場(chǎng)景
<5>.對數據進(jìn)行過(guò)濾和操縱相關(guān)數據的場(chǎng)景
<6>.普通的文本輸入提示和自動(dòng)完成的場(chǎng)景
(3).Ajax不適用場(chǎng)景
<1>.部分簡(jiǎn)單的表單
<2>.搜索
<3>.基本的導航
<4>.替換大量的文本
<5>.對呈現的操縱