AJAX是web2.0的基石,現在網上流行幾種開源的AJAX架構,比如:jQuery,Mootools,Dojo,Ext JS等等,那麼我們到底在什麼情況下該使用那個架構?以下是一組摘抄的資料:
<a href="http://blog.51cto.com/attachment/201201/180100235.jpg" target="_blank"></a>
其中Prototype使用率最高,很大程度上是因為它是最早成熟的架構,很多以前在項目中采用,是以現在一直在用
讓我們來看看選擇AJAX架構的基礎:
你的項目需求(即你需要哪些特性,例如是否要求做出精美的界面、特效或其它功能)
是否支援A等級的浏覽器(IE, Firefox等)?
文檔的品質:是否完善(包含教程,API,代碼示例等)
架構的可擴充性如何?為架構寫插件容易嗎?
你是否喜歡它的API的風格?
能大多程度上統一你的JavaScript代碼的風格?
架構大小(太大的架構導緻使用者下載下傳時間的延長)
架構是否強迫你改變寫HTML的方式(Dojo就是這樣)?
代碼執行速度:性能如何?
代碼是否為子產品化(Mootools為高度子產品化)?代碼可重用性如何?
設計思想
簡潔的思想:幾乎所有操作都是以選擇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。
核心的開發團隊和核心人員:John Resig等。
簡潔和簡短的文法,容易記。
事件處理有很多友善的方法,如click,而不是單一的addEvent之類的。
缺點
由于設計思想是追求高效和簡潔,沒有面向對象的擴充。設計思路和Mootools不一樣。
CSS Selector的速度稍微有些慢(但是現在速度已經大幅提高)
面向對象的設計思想。
子產品化,各子產品代碼非常獨立,最小的核心隻有8k,最大的優點是可選擇使用哪些子產品,用的時候隻導入使用的子產品即可,完整的也不到180k(沒有壓縮),壓縮後不到70k。
文法的簡潔,直覺。
特效(Effects):這一點比jQuery稍強,現在也正在開發Mootools UI(這應該是Ajax架構開發的一個趨勢)。
代碼寫的優美,易閱讀和修改。
文檔的完整(最新的1.2beta的文檔比以前更詳細)。
修改了低層的一些類:如Array, String等,這也是設計思想的不同。
在DOM和CSS Selector上不如jQuery強大。
三、Dojo
背後強大的支援:IBM、Sun、BEA等,這是非常重要的優勢。
功能的強大,Full Stack的架構,擴充了DHTML的能力,例如:
支援與浏覽器Back/Forward按鈕的內建。
Dojo Offline,一個跨平台的離線存儲API。
Chart元件,可以友善地在浏覽器端生成圖表。
基于SVG/VML的矢量圖形庫。
Google Maps、Yahoo! Maps元件,友善開發Mashup應用。
Comet支援,通過通用的Buyeux協定。
強大的UI(Dijit)。
面向對象的設計,統一的命名空間,包管理機制(The Package System and Custom Builds)
可擴充性。
複雜,學習曲線陡。
文檔的極端不全,這是一個很大的問題。
API很多不穩定,各版本間改動較大,現在還不是一個成熟的架構。
侵入性太大,頁面中大量使用dojo的屬性,例如<button dojoType="dijit.form.Button" id="helloButton">,如果将來dojo更新或者換一個架構時,負擔會很大。
性能問題,由于dojo加載采用了同步的機制,會暫時鎖定浏覽器,導緻CPU使用率達到100%。另外,很多Widget的速度很慢。
四、Ext JS
元件化,推進RIA(Rich Internet Application)的應用。
強大的UI,而且性能不錯,這是其最大的優點。
速度快,管是UI還是其它子產品。
100%面向對象群組件化的思想,一緻的文法,全局的命名空間。
文檔的完整,規範,友善。
核心的開發團隊,Jack Slocum等。
活躍的社群,迅速增加的使用者量。
子產品化實作,可擴充性強。
所有的元件(widgets)都可直接使用,而無需進行設定(當然,使用者可以選擇重新配置)。
稍複雜。
為重量級的架構(包含大量UI),體積大。如果導入ext-all.js,壓縮後也有近500k。
注意:EXT的商業使用:如果隻是把extjs包含在自己的項目中,而且這個項目不是賣給使用者做二次開發的工具箱,或元件庫,就可以遵守LGPL協定免費使用;否則要付費。
總結
輕量級選擇
輕量級的選擇:主要是mootools和jquery,由于它們的設計思想的不同,jQuery是追求簡潔和高效,Mootools除了追求這些目标以外,其核心在于面向對象,是以jQuery适合于快速開發,Mootools适合于稍大型和複雜的項目,其中需要面向對象的支援;另外,在Ajax的支援上,jQuery稍強一些;在Comet的支援上,jQuery有相關的插件,Mootools目前沒有,但是Comet的核心在于伺服器的支援,浏覽器端的接口很簡單,開發相關的插件很簡單。
在面向對象的Javascript Library中,mootools逐漸戰勝了prototype(體積大,面向對象的設計不合理等),也包括script.acul.ous(基于prototype,實際上就是prototype上的UI庫)。
面向RIA的架構
考慮純JavaScripty庫,目前主要是Dojo和ExtJS(還有YUI)。Dojo更适合企業應用和産品開發的需要,因為離線存儲、 DataGrid、2D、3D圖形、Chart、Comet等元件對于企業應用來說都是很重要的(當然這些元件還要等一段時間才能穩定下來)。例如,BEA基于Mashup技術開發的産品中已經使用了Dojo。
ExtJS:美觀和"易用",并且足夠強大。在對UI有比較大的需求時,是首選。
從我個人的使用情況來看 主要選擇是JQuery架構技術。主要是Ajax對Juery支援相對其他稍微良好一些,重要的是能夠快速開發,屬于輕量級元件,最近一直在向ExtJS架構轉換,主要公司主題業務涉及到這個技術,最近一直在摸索中
本文轉自chenkaiunion 51CTO部落格,原文連結:http://blog.51cto.com/chenkai/765460