天天看點

幾種流行的Ajax開發架構比較一、jQuery 首頁:http://jquery.com/

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的屬性,例如&lt;button dojoType="dijit.form.Button" id="helloButton"&gt;,如果将來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

繼續閱讀