基于xml的異步j(luò)avascript,簡(jiǎn)稱ajax,是當(dāng)前web創(chuàng)新(稱為web2.0)中的一個(gè)王冠。感謝組成ajax的各種技術(shù),web應(yīng)用的交互如flickr, backpack和google在這方面已經(jīng)有質(zhì)的飛躍。這個(gè)術(shù)語(yǔ)源自描述從基于網(wǎng)頁(yè)的web應(yīng)用到基于數(shù)據(jù)的應(yīng)用的轉(zhuǎn)換。在基于數(shù)據(jù)的應(yīng)用中,用戶需求的數(shù)據(jù)如聯(lián)系人列表,可以從獨(dú)立于實(shí)際網(wǎng)頁(yè)的服務(wù)端取得并且可以被動(dòng)態(tài)地寫入網(wǎng)頁(yè)中,給緩慢的web應(yīng)用體驗(yàn)著色使之像桌面應(yīng)用一樣。
雖然大部分開發(fā)人員在過去使用過xmlhttp或者使用iframe來加載數(shù)據(jù),但僅到現(xiàn)在我們才看到傳統(tǒng)的開發(fā)人員和公司開始采用這些技術(shù)。就像新的編程語(yǔ)言或模型伴隨著更多的痛苦,開發(fā)人員需要學(xué)習(xí)新的技巧及如何最好利用這些新技術(shù)。
ajax模式
許多重要的技術(shù)和ajax開發(fā)模式可以從現(xiàn)有的知識(shí)中獲取。例如,在一個(gè)發(fā)送請(qǐng)求到服務(wù)端的應(yīng)用中,必須包含請(qǐng)求順序、優(yōu)先級(jí)、超時(shí)響應(yīng)、錯(cuò)誤處理及回調(diào),其中許多元素已經(jīng)在web服務(wù)中包含了,就像現(xiàn)在的soa。ajax開發(fā)人員擁有一個(gè)完整的系統(tǒng)架構(gòu)知識(shí)。同時(shí),隨著技術(shù)的成熟還會(huì)有許多地方需要改進(jìn),特別是ui部分的易用性。
ajax開發(fā)與傳統(tǒng)的cs開發(fā)有很大的不同。這些不同引入了新的編程問題,最大的問題在于易用性。由于ajax依賴瀏覽器的javascript和xml,瀏覽器的兼容性和支持的標(biāo)準(zhǔn)也變得和javascript的運(yùn)行時(shí)性能一樣重要了。這些問題中的大部分來源于瀏覽器、服務(wù)器和技術(shù)的組合,因此必須理解如何才能最好的使用這些技術(shù)。
綜合各種變化的技術(shù)和強(qiáng)耦合的客戶服務(wù)端環(huán)境,ajax提出了一種新的開發(fā)方式。ajax開發(fā)人員必須理解傳統(tǒng)的mvc架構(gòu),這限制了應(yīng)用層次之間的邊界。同時(shí),開發(fā)人員還需要考慮cs環(huán)境的外部和使用ajax技術(shù)來重定型mvc邊界。最重要的是,ajax開發(fā)人員必須禁止以頁(yè)面集合的方式來考慮web應(yīng)用而需要將其認(rèn)為是單個(gè)頁(yè)面。一旦ui設(shè)計(jì)與服務(wù)架構(gòu)之間的范圍被嚴(yán)格區(qū)分開來后,開發(fā)人員就需要更新和變化的技術(shù)集合了。
時(shí)刻想著用戶
ajax的最大機(jī)遇在于用戶體驗(yàn)。在使應(yīng)用更快響應(yīng)和創(chuàng)新的過程中,定義web應(yīng)用的規(guī)則正在被重寫;因此開發(fā)人員必須更注重用戶?,F(xiàn)在用戶已經(jīng)逐漸習(xí)慣如何使用web應(yīng)用了。例如用戶通常希望每一次按鈕點(diǎn)擊會(huì)導(dǎo)致幾秒的延遲和屏幕刷新,但ajax正在打破這種長(zhǎng)時(shí)間的狀況。因此用戶需要重新體驗(yàn)按鈕點(diǎn)擊的響應(yīng)了。
可用性是ajax另人激動(dòng)的地方而且已經(jīng)產(chǎn)生了幾種新穎的技術(shù)。其中最引人注目的是一種稱為“黃色隱出”的技術(shù),他在數(shù)據(jù)更新之前時(shí)將用戶界面變?yōu)辄S色,更新完成后立刻恢復(fù)原來的顏色。ajax開發(fā)人員將用戶從web應(yīng)用的負(fù)載中解放出來;小心地利用ajax提供的豐富接口,不久桌面開發(fā)人員會(huì)發(fā)現(xiàn)ajax是他們的方向。
幾種工具和技術(shù)
隨著ajax迅速地引人注目起來,我想開發(fā)人員對(duì)這種技術(shù)的期待也迅速地增加。就像任何新技術(shù),ajax的興旺也需要一整個(gè)開發(fā)工具/編程語(yǔ)言及相關(guān)技術(shù)系統(tǒng)來支撐。
javascript
如名字所示ajax的概念中最重要而最被忽視的是他也是一種javascript編程語(yǔ)言。javascript是一種粘合劑使ajax應(yīng)用的各部分集成在一起。在大部分時(shí)間,javascript通常被服務(wù)端開發(fā)人員認(rèn)為是一種企業(yè)級(jí)應(yīng)用不需要使用的東西應(yīng)該盡力避免。這種觀點(diǎn)來來自以前編寫javascript代碼的經(jīng)歷:繁雜而又易出錯(cuò)的語(yǔ)言。類似的,他也被認(rèn)為將應(yīng)用邏輯任意地散布在服務(wù)端和客戶端中,這使得問題很難被發(fā)現(xiàn)而且代碼很難重用。在ajax中javascript主要被用來傳遞用戶界面上的數(shù)據(jù)到服務(wù)端并返回結(jié)果。xmlhttprequest對(duì)象用來響應(yīng)通過http傳遞的數(shù)據(jù),一旦數(shù)據(jù)返回到客戶端就可以立刻使用dom將數(shù)據(jù)放到網(wǎng)面上。
|||
xmlhttprequest
xmlhttprequest對(duì)象在大部分瀏覽器上已經(jīng)實(shí)現(xiàn)而且擁有一個(gè)簡(jiǎn)單的接口允許數(shù)據(jù)從客戶端傳遞到服務(wù)端,但并不會(huì)打斷用戶當(dāng)前的操作。使用xmlhttprequest傳送的數(shù)據(jù)可以是任何格式,雖然從名字上建議是xml格式的數(shù)據(jù)。
開發(fā)人員應(yīng)該已經(jīng)熟悉了許多其他xml相關(guān)的技術(shù)。xpath可以訪問xml文檔中的數(shù)據(jù),但理解xml dom是必須的。類似的,xslt是最簡(jiǎn)單而快速的從xml數(shù)據(jù)生成html或xml的方式。許多開發(fā)人員已經(jīng)熟悉xpath和xslt,因此ajax選擇xml作為數(shù)據(jù)交換格式有意義的。xslt可以被用在客戶端和服務(wù)端,他能夠減少大量的用javascript編寫的應(yīng)用邏輯。
css
為了正確的瀏覽ajax應(yīng)用,css是一種ajax開發(fā)人員所需要的重要武器。css提供了從內(nèi)容中分離應(yīng)用樣式和設(shè)計(jì)的機(jī)制。雖然css在ajax應(yīng)用中扮演至關(guān)重要的角色,但他也是構(gòu)建創(chuàng)建跨瀏覽器應(yīng)用的一大阻礙,因?yàn)椴煌臑g覽器廠商支持各種不同的css級(jí)別。
服務(wù)器端
但不像在客戶端,在服務(wù)端ajax應(yīng)用還是使用建立在如java,.net和php語(yǔ)言基礎(chǔ)上機(jī)制;并沒有改變這個(gè)領(lǐng)域中的主要方式。
既然如此,我們對(duì)ruby on rails框架的興趣也就迅速增加了。在一年多前,ruby on rails已經(jīng)吸引了大量開發(fā)人員基于其強(qiáng)大功能來構(gòu)建web和ajax應(yīng)用。雖然目前還有很多快速應(yīng)用開發(fā)工具存在,ruby on rails看起來已經(jīng)儲(chǔ)備了簡(jiǎn)化構(gòu)建ajax應(yīng)用的能力。
開發(fā)工具
在實(shí)際構(gòu)建ajax應(yīng)用中,你需要的不只是文本編輯器。既然是javascript非編譯的,他可以容易地編寫和運(yùn)行在瀏覽器中;然而,許多工具提供了有用的擴(kuò)展如語(yǔ)法高亮和智能完成。
不同的ide提供了對(duì)javascript支持的不同等級(jí)。來自jetbrains的intellij idea是一個(gè)用來javascript開發(fā)的更好的ide,雖然許多開發(fā)人員也喜歡microsoft’s visual studio產(chǎn)品(允諾會(huì)在最新的版本中改善對(duì)ajax的支持)。eclipse包含了兩個(gè)免費(fèi)的javascript編輯器插件和一個(gè)商業(yè)的來自activestat的komodo ide。
另一個(gè)javascript和ajax開發(fā)中的問題是調(diào)試?yán)щy。不同的瀏覽器提供不同的通常是隱藏的運(yùn)行時(shí)錯(cuò)誤信息,而javascript的缺陷如雙重變量賦值(通常是由于缺少數(shù)據(jù)類型)使得調(diào)試更加困難。在ajax的開發(fā)中,調(diào)試就更復(fù)雜了,因?yàn)槠湫枰獦?biāo)識(shí)究竟是客戶端還是服務(wù)端產(chǎn)生的錯(cuò)誤。在過去,javascript調(diào)試的方法是刪除所有代碼然后一行行的增加直到錯(cuò)誤出現(xiàn)。現(xiàn)在,更多開發(fā)人員回到為ie準(zhǔn)備的microsoft script debugger和為mozilla瀏覽器準(zhǔn)備的venkman。
瀏覽器兼容性
javascript編程的最大問題來自不同的瀏覽器對(duì)各種技術(shù)和標(biāo)準(zhǔn)的支持。構(gòu)建一個(gè)運(yùn)行在不同瀏覽器(如ie和火狐)是一個(gè)困難的任務(wù)。因此幾種ajax javascript框架或者生成基于服務(wù)端邏輯或標(biāo)記庫(kù)的javascript,或者提供符合跨瀏覽器ajax開發(fā)的客戶端javascript庫(kù)。一些流行的框架包括:ajax.net, backbase, bitkraft, django, dojo, dwr, mochikit, prototype, rico, sajax, sarissa, and script.aculo.us.
這些框架給開發(fā)人員更多的空間使得他們不需要擔(dān)心跨瀏覽器的問題。雖然這些框架提升了開發(fā)人員構(gòu)建應(yīng)用的能力,但由于廠商已經(jīng)開發(fā)了更細(xì)節(jié)的用戶界面的打包組件解決方案,因此在ajax組件市場(chǎng)中需要考慮一些其他因素。例如提供通用用戶界面的組件如組合框和數(shù)據(jù)柵格的幾個(gè)廠商,都可以被用來在應(yīng)用中創(chuàng)建良好的通過類似電子數(shù)據(jù)表方式來查看和編輯數(shù)據(jù)的體驗(yàn)。但這些組件不僅是封裝了組件的用戶界面而且包括與服務(wù)端數(shù)據(jù)的通訊方式,這些組件通常使用基于標(biāo)記方式來實(shí)現(xiàn)如asp.net或jsf控件。
展望
最近ie和火狐之間的瀏覽器之爭(zhēng)變得火熱起來,因此ajax開發(fā)人員需要足夠敏捷的作出反應(yīng)。關(guān)鍵點(diǎn)在一些問題如css或xml,雖然各種瀏覽器形成采用最新標(biāo)準(zhǔn)的不同陣營(yíng)(如mozilla擁抱svg和e4x標(biāo)準(zhǔn)及在最新火狐beta版本中使用xul,而微軟使用自己的xaml技術(shù))。所有這些技術(shù)代表當(dāng)前ajax主流javascript和xml的市場(chǎng)方向改變。
總的來說,ajax開發(fā)人員必須盡快地跟進(jìn)最新的技術(shù)并利用高產(chǎn)的工具集。成功的ajax開發(fā)人員還需要留心他們的使用者以避免將任何問題擴(kuò)大化。并且ajax開發(fā)人員還需要持續(xù)地創(chuàng)新來創(chuàng)建增強(qiáng)web應(yīng)用易用性的新方法。
新聞熱點(diǎn)
疑難解答
圖片精選