﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-同一个目标，同一个梦想-随笔分类-AJAX</title><link>http://www.blogjava.net/J2EEHOME/category/39555.html</link><description>One Target,One Dream</description><language>zh-cn</language><lastBuildDate>Wed, 13 May 2009 10:25:11 GMT</lastBuildDate><pubDate>Wed, 13 May 2009 10:25:11 GMT</pubDate><ttl>60</ttl><item><title>几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比</title><link>http://www.blogjava.net/J2EEHOME/archive/2009/05/13/270460.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Wed, 13 May 2009 09:59:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/archive/2009/05/13/270460.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/270460.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/archive/2009/05/13/270460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/270460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/270460.html</trackback:ping><description><![CDATA[<div style="text-align: center"><font size="4"><span style="font-weight: bold">几种流行的<a onclick="javascript:tagshow(event, 'AJAX');" href="javascript:;" target="_self"><u><strong>AJAX</strong></u></a>框架<a onclick="javascript:tagshow(event, 'jQuery');" href="javascript:;" target="_self"><u><strong>jQuery</strong></u></a>,Mootools,Dojo,Ext JS的对比</span><br />
</font></div>
<div style="text-align: center"><br />
－－摘录<br />
</div>
<br />
［说明］我在网上许多地方遇到过这篇文章，都没有明确标记出作者，感到奇怪？？如果您是这篇文章的作者，那么十分抱歉，恕我直接到文章摘录于此。因为这篇文章对我实在太具有参考价值了。原文如下：<br />
<br />
<div id="blog_text" class="cnt">
<p><strong>AJAX</strong>是<strong>web20</strong>的基石，现在网上流行几种<a onclick="javascript:tagshow(event, '%BF%AA%D4%B4');" href="javascript:;" target="_self"><u><strong>开源</strong></u></a>的AJAX框架，比如：jQuery,Mootools,Dojo,Ext JS等等，那么我们到底在什么情况下该使用那个框架？以下是一组摘抄的数据：</p>
<p>Ajaxian在2007年底对Ajax工具进行了调查，部分调查结果见下表（其中数字为调查者使用该工具的百分比，详细的请参见网页）：<a href="http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results"><font color="#135cae">http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results</font></a></p>
<table style="border-bottom: medium none; border-left: medium none; width: 403.75pt; border-collapse: collapse; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0" width="538">
    <tbody>
        <tr>
            <td style="border-bottom: black 0.5pt solid; border-left: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 51.7pt; padding-right: 5.4pt; border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="69"><span><font size="3"><font color="#000000"><font face="Times New Roman">Prototype</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 45.1pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="60"><span><font size="3"><font color="#000000"><font face="Times New Roman">jQuery</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 29.2pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="39"><span><font size="3"><font color="#000000"><font face="Times New Roman"><a onclick="javascript:tagshow(event, 'Ext');" href="javascript:;" target="_self"><u><strong>Ext</strong></u></a></font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 73.25pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="98"><span><font size="3"><font color="#000000"><font face="Times New Roman">Script.aculo.us</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 54.25pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="72"><span><font size="3"><font color="#000000"><font face="Times New Roman"><a onclick="javascript:tagshow(event, 'Mootools');" href="javascript:;" target="_self"><u><strong>Mootools</strong></u></a></font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 29.5pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="39"><span><font size="3"><font color="#000000"><font face="Times New Roman">YUI</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 35.9pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="48"><span><font size="3"><font color="#000000"><font face="Times New Roman">JSON</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 33.8pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="45"><span><font size="3"><font color="#000000"><font face="Times New Roman"><a onclick="javascript:tagshow(event, 'Dojo');" href="javascript:;" target="_self"><u><strong>Dojo</strong></u></a></font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 51.05pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-top: black 0.5pt solid; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="68"><span><font size="3"><font color="#000000"><font face="Times New Roman">Backbase</font></font></font></span></td>
        </tr>
        <tr>
            <td style="border-bottom: black 0.5pt solid; border-left: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; border-top-color: rgb(236,233,216); padding-left: 5.4pt; width: 51.7pt; padding-right: 5.4pt; border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="69"><span><font size="3"><font color="#000000"><font face="Times New Roman">34.1%</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; border-top-color: rgb(236,233,216); padding-left: 5.4pt; width: 45.1pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="60"><span><font size="3"><font color="#000000"><font face="Times New Roman">29.3%</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; border-top-color: rgb(236,233,216); padding-left: 5.4pt; width: 29.2pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="39"><span><font size="3"><font color="#000000"><font face="Times New Roman">22.5%</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; border-top-color: rgb(236,233,216); padding-left: 5.4pt; width: 73.25pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="98"><span><font size="3"><font color="#000000"><font face="Times New Roman">22.3%</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; border-top-color: rgb(236,233,216); padding-left: 5.4pt; width: 54.25pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="72"><span><font size="3"><font color="#000000"><font face="Times New Roman">14.3%</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; border-top-color: rgb(236,233,216); padding-left: 5.4pt; width: 29.5pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="39"><span><font size="3"><font color="#000000"><font face="Times New Roman">13%</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; border-top-color: rgb(236,233,216); padding-left: 5.4pt; width: 35.9pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="48"><span><font size="3"><font color="#000000"><font face="Times New Roman">12.9%</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; border-top-color: rgb(236,233,216); padding-left: 5.4pt; width: 33.8pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="45"><span><font size="3"><font color="#000000"><font face="Times New Roman">11.8%</font></font></font></span></td>
            <td style="border-bottom: black 0.5pt solid; padding-bottom: 0cm; background-color: transparent; border-top-color: rgb(236,233,216); padding-left: 5.4pt; width: 51.05pt; padding-right: 5.4pt; border-left-color: rgb(236,233,216); border-right: black 0.5pt solid; padding-top: 0cm" valign="top" width="68"><span><font size="3"><font color="#000000"><font face="Times New Roman">8.3%</font></font></font></span></td>
        </tr>
    </tbody>
</table>
<p>其中Prototype使用率最高，很大程度上是因为它是最早成熟的框架，很多以前在项目中采用，所以现在一直在用</p>
<p><strong>让我们来看看选择AJAX框架的基础：</strong></p>
<p>你的项目需求（即你需要哪些特性，例如是否要求做出精美的界面、特效或其它功能）<br />
是否支持A等级的浏览器（IE, Firefox等）?<br />
文档的质量：是否完善（包含教程，API，代码示例等）<br />
框架的可扩展性如何？为框架写插件容易吗？<br />
你是否喜欢它的API的风格？<br />
能大多程度上统一你的JavaScript代码的风格？<br />
框架大小（太大的框架导致用户下载时间的延长）<br />
框架是否强迫你改变写HTML的方式（Dojo就是这样）？<br />
代码执行速度：性能如何？<br />
代码是否为模块化（Mootools为高度模块化）？代码可重用性如何？</p>
<h1>1:Jquery</h1>
<p>&nbsp;</p>
<h1>主页：<a href="http://jquery.com/"><font color="#135cae">http://jquery.com/</font></a></h1>
<p><strong><a onclick="javascript:tagshow(event, '%C9%E8%BC%C6');" href="javascript:;" target="_self"><u><strong>设计</strong></u></a>思想<br />
</strong>简洁的思想：几乎所有操作都是以选择DOM元素（有强大的Selector）开始，然后是对其的操作（Chaining等特性）。</p>
<p><strong>优点</strong><br />
小，压缩后代码只有20多k（无压缩代码94k）。<br />
Selector和DOM操作的方便：jQuery的Selector与mootools的Element.Selectors.js比较，CSS Selector, XPath Selector（1.2后已删除）<br />
Chaining：总是返回一个jQuery对象，可以连续操作。<br />
文档的完整，易用性（每个API都有完整的例子，这是其它框架现在不能比的），而且网上还有很多其它的文档，书籍。<br />
应用的广泛，包括<a onclick="javascript:tagshow(event, 'google');" href="javascript:;" target="_self"><u><strong>google</strong></u></a> code也使用了jQuery。</p>
<p><strong>使用jQuery的站点：</strong><a href="http://docs.jquery.com/Sites_Using_jQuery"><strong><font color="#135cae">http://docs.jquery.com/Sites_Using_jQuery</font></strong></a><br />
核心的开发团队和核心人员：John Resig等。<br />
简洁和简短的语法，容易记。<br />
可扩展性：有大量用户开发的插件可供使用（<a href="http://jquery.com/plugins/"><font color="#135cae">http://jquery.com/plugins/</font></a>）<br />
jQuery UI（<a href="http://jquery.com/plugins/"><font color="#135cae">http://jquery.com/plugins/</font></a>，基于jQuery，但和核心的jQuery是独立的），不断发展中。<br />
友好和活跃的社区：google groups:<a href="http://docs.jquery.com/Discussion"><font color="#135cae">http://docs.jquery.com/Discussion</font></a><br />
事件处理有很多方便的方法，如click，而不是单一的addEvent之类的。</p>
<p><strong>缺点</strong><br />
由于设计思想是追求高效和简洁，没有面向对象的扩展。设计思路和Mootools不一样。<br />
CSS Selector的速度稍微有些慢（但是现在速度已经大幅提高）</p>
<p>&nbsp;</p>
<h2>2:Mootools</h2>
<h2><br />
主页：<a href="http://mootools.net/"><font color="#135cae">http://mootools.net/</font></a></h2>
<p><strong>设计思想<br />
</strong>面向对象的设计思想。</p>
<p><strong>优点<br />
</strong>模块化，各模块代码非常独立，最小的核心只有8k，最大的优点是可选择使用哪些模块，用的时候只导入使用的模块即可，完整的也不到180k（没有压缩），压缩后不到70k。<br />
语法的简洁，直观。<br />
特效（Effects）：这一点比jQuery稍强，现在也正在开发Mootools UI（这应该是Ajax框架开发的一个趋势）。<br />
代码写的优美，易阅读和修改。<br />
文档的完整（最新的1.2beta的文档比以前更详细）。<br />
活跃的社区：官网(<a href="http://forum.mootools.net/"><font color="#135cae">http://forum.mootools.net/</font></a>)，还有一个IRC。<br />
性能：见：<a href="http://mootools.net/slickspeed/"><font color="#135cae">http://mootools.net/slickspeed/</font></a></p>
<p><strong>缺点</strong><br />
修改了低层的一些类：如Array, String等，这也是设计思想的不同。<br />
在DOM和CSS Selector上不如jQuery强大。</p>
<h2><br />
3:Dojo</h2>
<h2><br />
主页：<a href="http://dojotoolkit.org/"><font color="#135cae">http://dojotoolkit.org/</font></a></h2>
<p><strong>优点<br />
</strong>背后强大的支持：IBM、Sun、BEA等，这是非常重要的优势。<br />
功能的强大，Full Stack的框架，扩展了DHTML的能力，例如：<br />
支持与浏览器Back/Forward按钮的集成。<br />
Dojo Offline，一个跨平台的离线存储API。<br />
Chart组件，可以方便地在浏览器端生成图表。<br />
基于SVG/VML的矢量图形库。<br />
Google Maps、Yahoo! Maps组件，方便开发Mashup应用。<br />
Comet支持，通过通用的Buyeux协议。<br />
强大的UI（Dijit）。<br />
面向对象的设计，统一的命名空间，包<a onclick="javascript:tagshow(event, '%B9%DC%C0%ED');" href="javascript:;" target="_self"><u><strong>管理</strong></u></a>机制（The Package System and Custom Builds）<br />
可扩展性。</p>
<p>缺点<br />
复杂，<a onclick="javascript:tagshow(event, '%D1%A7%CF%B0');" href="javascript:;" target="_self"><u><strong>学习</strong></u></a>曲线陡。<br />
文档的极端不全，这是一个很大的问题。<br />
API很多不稳定，各版本间改动较大，现在还不是一个成熟的框架。<br />
侵入性太大，页面中大量使用dojo的属性，例如&lt;button dojoType="dijit.form.Button" id="helloButton"&gt;，如果将来dojo升级或者换一个框架时，负担会很大。<br />
性能问题，由于dojo加载采用了同步的机制，会暂时锁定浏览器，导致CPU使用率达到100%。另外，很多Widget的速度很慢。</p>
<p>&nbsp;</p>
<p><strong><font size="5">4:Ext JS</font></strong></p>
<p><br />
主页：<a href="http://extjs.com/"><font color="#135cae">http://extjs.com/</font></a></p>
<p><strong>设计思想</strong><br />
组件化，推进RIA（Rich Internet Application）的应用。</p>
<p><strong>优点</strong><br />
强大的UI，而且性能不错，这是其最大的优点。<br />
速度快，管是UI还是其它模块。<br />
100%面向对象和组件化的思想，一致的语法，全局的命名空间。<br />
文档的完整，规范，方便。<br />
核心的开发团队，Jack Slocum等。<br />
活跃的社区，迅速增加的用户量。<br />
模块化实现，可扩展性强。<br />
所有的组件（widgets）都可直接使用，而无需进行设置（当然，用户可以选择重新配置）。</p>
<p><strong>缺点<br />
</strong>稍复杂。<br />
为重量级的框架（包含大量UI），体积大。如果导入ext-all.js，压缩后也有近500k。</p>
<p>注意：EXT的商业使用：如果只是把extjs包含在自己的项目中，而且这个项目不是卖给用户做二次开发的工具箱，或组件库，就可以遵守LGPL协议免费使用；否则要付费。</p>
<p><br />
<strong>总结</strong><br />
轻量级选择<br />
轻量级的选择：主要是mootools和jquery，由于它们的设计思想的不同，jQuery是追求简洁和高效，Mootools除了追求这些目标以外，其核心在于面向对象，所以jQuery适合于快速开发，Mootools适合于稍大型和复杂的项目，其中需要面向对象的支持；另外，在Ajax的支持上，jQuery稍强一些；在Comet的支持上，jQuery有相关的插件，Mootools目前没有，但是Comet的核心在于服务器的支持，浏览器端的接口很简单，开发相关的插件很简单。</p>
<p>在面向对象的Javascript. Library中，mootools逐渐战胜了prototype（体积大，面向对象的设计不合理等），也包括script.acul.ous（基于prototype，实际上就是prototype上的UI库）。</p>
<p>面向RIA的框架</p>
<p>考虑纯JavaScripty库，目前主要是Dojo和ExtJS（还有YUI）。Dojo更适合企业应用和产品开发的需要，因为离线存储、 DataGrid、2D、3D图形、Chart、Comet等组件对于企业应用来说都是很重要的（当然这些组件还要等一段时间才能稳定下来）。例如，BEA基于Mashup技术开发的产品中已经使用了Dojo。</p>
<p>ExtJS：美观和"易用"，并且足够强大。在对UI有比较大的需求时，是首选。</p>
</div>
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/270460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-05-13 17:59 <a href="http://www.blogjava.net/J2EEHOME/archive/2009/05/13/270460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>