ajax框架
ajax框架
基於XML的非同步JavaScript,簡稱AJAX,是當前Web創新(稱為Web2.0)中的一個王冠。感謝組成AJAX的各種技術,Web應用的交互如Flickr, Backpack和Google在這方面已經有質的飛躍。這個術語源自描述從基於網頁的Web應用到基於數據的應用的轉換。在基於數據的應用中,用戶需求的數據如聯繫人列表,可以從獨立於實際網頁的服務端取得並且可以被動態地寫入網頁中,給緩慢的Web應用體驗著色使之像桌面應用一樣。
Ajax並不是一種新技術,而是整合了JavaScript、Xml、CSS等已有技術。雖然大部分開發人員在過去使用過XMLHttp或者使用Iframe來載入數據,但僅到現在我們才看到傳統的開發人員和公司開始採用這些技術。就像新的編程語言或模型伴隨著更多的痛苦,開發人員需要學習新的技巧及如何最好利用這些新技術。
AJAX模式
許多重要的技術和AJAX開發模式可以從現有的知識中獲取。例如,在一個發送請求到服務端的應用中,必須包含請求順序、優先順序、超時響應、錯誤處理及回調,其中許多元素已經在Web服務中包含了,就像現在的SOA。AJAX開發人員擁有一個完整的系統架構知識。同時,隨著技術的成熟還會有許多地方需要改進,特別是UI部分的易用性。
AJAX開發與傳統的CS開發有很大的不同。這些不同引入了新的編程問題,最大的問題在於易用性。由於AJAX依賴瀏覽器的JavaScript和XML,瀏覽器的兼容性和支持的標準也變得和JavaScript的運行時性能一樣重要了。這些問題中的大部分來源於瀏覽器、伺服器和技術的組合,因此必須理解如何才能最好的使用這些技術。
綜合各種變化的技術和強耦合的客戶服務端環境,AJAX提出了一種新的開發方式。AJAX開發人員必須理解傳統的MVC架構,這限制了應用層次之間的邊界。同時,開發人員還需要考慮CS環境的外部和使用AJAX技術來重定型MVC邊界。最重要的是,AJAX開發人員必須禁止以頁面集合的方式來考慮Web應用而需要將其認為是單個頁面。一旦UI設計與服務架構之間的範圍被嚴格區分開來后,開發人員就需要更新和變化的技術集合了。
Dojo
Dojo是最老的框架之一,於2004年9月開始開發。這個項目的目標是建立充分利用XHR的DHTML工具包,並把重心放在可用性問題上。Dojo只有幾個文件,不用處理XHR的建立,只需調用bind方法,並傳入想調用的URL和回調方法即可。就這麼簡單。還可以使用bind方法來提交整個表單。
Dojo有一個特性使它獨樹一幟,這就是它支持向後和向前按鈕。儘管這個特性不一定在每個瀏覽器上都能用(遺憾的是,Safari就是一個異類),但你確實可以註冊一個回調方法,在用戶點擊了向後按鈕或向前按鈕時觸發這個方法。Dojo還提供了changeURL標記,力圖解決使用Ajax所固有的書籤問題。
Dojo看上去是相對成熟的工具包之一,它把重點放在可用性上,這一點很不錯。Dojo表現得相當穩定,在它身後還有一些支撐力量。Dojo的郵件列表相當活躍,多看一些文檔可能更有幫助。
TIBET
你覺得Ajax最早是什麼時候出現的?根據對此的解釋,也許會認為TIBET可能是現存最老的框架。根據文檔所述,TIBET小組從1997年就開始開發這個工具包,他們的目標是提供企業級Ajax支持。TIBET看上去不只是包裝了XMLHttpRequest對象,它還對Web服務和底層協議提供了支持,並且提供了Google、Amazon和許多其他常用服務的預置包裝器。
真正讓TIBET卓而不群的是,它有一個完全互動式的基於瀏覽器的IDE,這能大大簡化開發、調試和單元測試。
Flash/JavaScript集成包
在Ajax之前,Flash很是風行,很多Web網站都建立在Flash平台上。那些曾對Flash狠下一番功夫的人不想完全放棄Flash,利用這個開源項目就能同時利用Ajax技術。這個工具包在所有主要瀏覽器上都能用,使得JavaScript能夠調用ActionScript,ActionScript也能調用JavaScript。可以來回傳遞大量對象,包括日期、串和數組。
Flash/JavaScript集成包的安裝涉及一些JavaScript文件,以及兩個用於Flash的庫函數。從頁面上調用ActionScript函數只需幾行代碼而已。有關的文檔相當少,不過,如果你想使用Ajax訪問Flash,這個工具包就很值得研究。
Google AJAXSLT
基於Google Maps的工作,Google AJAXSLT是使用XPath的XSL轉換(XSLT)的JavaScript實現。XSLT可以把XML文檔轉換為其他語言,如HTML。AJAXSLT允許使用JavaScript在瀏覽器上直接完成這些轉換。
Google AJAXSLT在所有主要瀏覽器上都能工作,它是在BSD許可證下發布的。這個工具包很小,包括幾個JavaScript文件,還有一些方便的測試頁。Google AJAXSLT不是十全十美的,不過,如果Google Suggest有所提示,我們希望Google AJAXSLT的缺點能很快解決。因為Google是最先使用Ajax的網站之一,我們會很有興緻地看到在未來幾個月它還會有所增加。
libXmlRequest
libXmlRequest框架也是比較老的一個框架,早在2003年就已經發布了。這個框架包括一個JavaScript文件,它相當於XMLHttpRequest對象的一個包裝器,提供了兩個重載的請求函數:getXml和postXml。另外,它有一些處理緩衝池和緩存的屬性,還有一些工具函數處理常見的任務,如解析來自伺服器的XML以及修改DOM。
這個工具包能在哪些瀏覽器上運行,這一點還不是很清楚,而且有關的文檔相當少。這個工具包版權歸其作者Stephen W. Cote所有,其中沒有提到許可問題。因此,只能用它幫助你產生靈感。
RSLite
RSLite是遠程腳本的一個實現,由Brent Ashley編寫。從技術上講,它沒有利用作為Ajax核心的XMLHttpRequest對象,但是得到了更廣泛的瀏覽器支持。如果你需要支持原來的瀏覽器,而這些瀏覽器不支持XMLHttpRequest對象,就可以試試RSLite。RSLite是相當輕量級的,已從2000年發展至今。
SACK
SACK(簡單Ajax代碼包)開發為一個瘦包裝器,包裝了XMLHttpRequest對象。其作者Gregory Wild-Smith認為,其他的許多框架太過複雜,而且做了許多本不該它們完成的任務。所以他創建了SACK來簡化Ajax的開發。SACK包括幾個可以簡化伺服器調用的方法。比起具體創建適當的XMLHttpRequest對象實例來說,用更少的代碼就能向伺服器發送數據,並處理響應。
SACK由一個JavaScript文件組成,其中包含很少的代碼。SACK底層軟體的發布得到了修改X11許可(也稱為MIT許可),與大多數開源項目一樣,它的文檔並不多,不過,入門肯定還是綽綽有餘的。SACK的真正強大之處在於它的簡單性,如果你要找的是一個基本包裝器,可以試試SACK。
sarrisa
sarissa有一點是Ajax做不到的,它以一種獨立於瀏覽器的方式對XML API提供了包裝支持。利用這個框架,創建和使用XMLHttpRequest對象實在是小菜一碟(不用檢查瀏覽器,它已經為你處理好了)。另外,sarissa還對使用DOM提供了支持。類似於Google AJAXSLT,sarissa也支持XSLT,它模擬了IE上的Mozilla處理器。
sarissa只包括幾個類,在GPL協議下發布。Mozilla/Firefox和IE都充分支持sarissa,只在Opera、Konqueror和Safari瀏覽器上有些函數不能用。
XHConn
XHConn類似於SACK,它相當於XMLHttpRequest對象的一個簡單包裝器。你不用直接使用XMLHttpRequest對象,只需首先啟動一個XHConn實例,與使用XHR同樣的方法加以處理。也就是說,無需瀏覽器檢查,並提供了一種簡單的方法來確定瀏覽器是否支持XHR(這對於需要妥善降級的網站尤其方便)。
XHConn在Safari、IE、Mozilla、Firefox和Opera上都能工作。類似於大多數Ajax框架,這是一個開源實現,在Creative Commons License協議下發布。XHConn是一個代碼不多的文件,不過它確實做到了該做的事情——簡化Ajax。
設計思想
簡潔的思想:幾乎所有操作都是以選擇DOM元素(有強大的Selector)開始,然後是對其的操作(Chaining等特性)。
優點
小,壓縮後代碼只有20多k(無壓縮代碼94k)。
Selector和DOM操作的方便:jQuery的Selector與mootools的Element.Selectors.js比較,CSS Selector, XPath Selector(1.2后已刪除)
Chaining:總是返回一個jQuery對象,可以連續操作。
文檔的完整,易用性(每個API都有完整的例子,這是其它框架現在不能比的),而且網上還有很多其它的文檔,書籍。
應用的廣泛,包括google code也使用了jQuery。
伺服器端框架
以下介紹伺服器端的框架。
CPAINT
CPAINT(跨平台非同步介面工具包)在伺服器端實現Ajax,它向客戶返迴文本或DOM文檔對象,以便用JavaScript處理。CPAINT在大多數主要瀏覽器上都能用,而且支持遠程腳本,在GPL協議下發布。這個項目的文檔相當完備,不過,CPAINT只支持PHP和ASP。
Sajax
利用Sajax,可以直接從JavaScript調用伺服器端代碼。Sajax支持Perl、Python、Ruby和ASP等語言(不過奇怪的是,目前並不支持Java)。安裝Sajax相當簡單,只涉及針對特定伺服器語言的簡單的庫。Sajax的開發社區極其活躍。已經確認的只有IE 6和Mozilla/Firefox提供Sajax支持,不過本書作者認為它在Safari上也能很好地使用。
JSON/JSON-RPC
JavaScript對象註解(JSON)是一種文本格式,與XML很相似,可以用於交換數據。JSON的設計要保證兩方面,一方面便於人閱讀,另一方面便於機器解析,它使用了C系列語言類似的約定。與JSON相關的還有JSON-RPC,這是一個遠程過程調用(RPC)協議,類似於XML-RPC,但面向的是JSON語言。作為規約,JSON-RPC在許多語言中都有實現,包括Java、Ruby、Python和Perl。
由於JSON-RPC是規約,你需要知道哪個特定實現適用於你的環境,還要充分了解特定的實現。取決於具體的實現,有些實現的文檔相當完備,有些則根本沒有。開發人員的參與程度也有很大不同。關於JSON-RPC規約的討論已經有些少了。
Direct Web Remoting
利用Direct Web Remoting (DWR),你能從JavaScript直接調用Java方法,就好像它們是瀏覽器的本地方法一樣。儘管後台嚴格限制為Java,但DWR仍然是最流行的框架之一。DWR的文檔是最棒的,還有一些有用的例子可以幫助你入門。
安裝並不難,不過還要編輯Web應用的部署描述文件,另外要編輯DWR特定的文件。DWR配置文件指定了可以遠程創建和調用的類,而且文檔中警告用戶:從瀏覽器調用伺服器確實存在一些安全問題。除了包含伺服器端代碼的JAR文件,另外還有兩個JavaScript文件包含了一些輔助函數。DWR適用於一些常見的Web框架,如Struts和Tapestry,在Apache協議下發布。如果想從Web頁面調用Java方法,DWR能助你一臂之力。
SWATO
Shift Web Applications TO (SWATO)也是一個基於Java的Ajax框架解決方案。SWATO在所有Servlet 2.3或更高版本的容器中都能工作,類似於DWR,它也需要對配置文件做一些更新。有意思的是,SWATO充分利用了JSON來完成客戶和伺服器之間數據的編組,與本附錄中討論的其他一些框架相似,它也允許從瀏覽器調用伺服器端Java。為了幫助開發人員,SWATO包括許多可復用的組件,如自動完成文本框等。
與使用其他框架相比,使用SWATO要相對複雜一些,要訪問的類需要實現一個SWATO介面。不過,其文檔相當完備,對於入門來講綽綽有餘。SWATO設計為使用Spring來打包服務,但是不一定非得如此。
Java BluePrints
Sun的BluePrints小組一直忙於將Ajax納入他們的解決方案目錄(Solutions Catalog)中。Solutions Catalog包括一些很好的文檔,描述了如何使用基本Ajax,如何實現自動完成,如何創建一個進度條以及如何驗證表單。它還包括JavaServer Faces組件。
Ajax Net
Ajax Net之於Microsoft .NET就相當於SAJAX、DWR和SWATO之於Java。利用AjaxNet,你能從JavaScript客戶調用.NET方法。AjaxNet包括一個DLL,可以與VB .NET或C#一同使用。AjaxNet的文檔很好地展示了針對各種場景的解決方案,而且能得到相關的源代碼。不過,AjaxNet的許可協議很不明確。
Microsoft的Atlas項目
Microsoft在Ajax領域涉足的時間已經不短了,畢竟,XMLHttpRequest對象是Microsoft發明的,而且從1998年開始就已經用在Web版本的Outlook中。Microsoft把重點放在提供一個更加健壯的開發環境上,從而讓開發人員的工作更輕鬆。Microsoft的著眼點還不只這些,還力圖提供客戶端腳本框架、ASPNET控制項和Web服務集成。Microsoft還發布了Atlas項目,作為其ASPNET 2.0預覽版的一部分。有Microsoft的介入,開發人員的工具包可能會比今天充實得多。
Ruby on Rails
Rails是一個令人興奮的新Web框架,建立在Ruby語言基礎上。如今,Rails已經得到了大量關注(在Google上查一下Rails,可以找到更多信息),這是因為使用Rails能夠快速開發基於Web的應用。開發Basecamp時,37signals小組提出名為Rails的框架。Basecamp正是Ajax應用的主要示例,所以看到Rails對Ajax提供如此充分的支持,我們不應感到奇怪。Rails有許多內置的JavaScript庫,其中包裝了很多常用的特性,它還包含一個模塊,其中包裝了Ruby的JavaScript調用。如果你在使用Rails,就會發現Ajax非常簡單。