如何最好地使用多个AJAX库?

7

你有使用多个 AJAX 库的经验吗?

Prototype、jQuery、Yahoo 等库都有一些有用的特性。是否可以包含所有库并从中选择你想要的部分,它们是否通常可以在命名空间方面完美地协作?为了速度考虑,包含的库的大小/数量是否存在实际限制,还是这些限制可以忽略不计?是否有特别适合配对使用的库(例如 Prototype/Scriptaculous),或者有一些库是不兼容的?

7个回答

9
你可以使用所有这些库,但我强烈建议不要这样做。下载和执行那么多JavaScript很可能会使浏览器变慢,从用户和开发人员的角度来看,选择一个库会更好。上下文/架构切换更少,维护的代码也更少。
正如其他答案所说,大多数库不会冲突。
请参阅Yahoo!的Exceptional Performance网站获取更多信息。

4
您可以使用Google AJAX Libraries API。它为jQuery、prototype、script.aculo.us、MooTools和dojo提供了一个共同的分发网络和加载架构。

3

YUI的命名空间很强,因此不会与其他库冲突。

如前所述,您可以在jQuery中运行无冲突模式。

Prototype确实存在一些问题,部分原因是它(或者它曾经)修改了核心对象,例如ArrayProtosafe试图解决这些问题。

Script.aculo.us只是一个小部件库,位于Prototype之上,因此这两个库应该可以很好地配合使用。

所有这些意味着您可以在应用程序中使用YUI、jQuery、Prototype和Script.aculo.us,但您可能会发现仅使用一个库使维护事项变得更加容易。


2
我也是jQuery的信仰者,所以请原谅我对其他技术的了解不足。jQuery之所以伟大在于它的无冲突模式,例如,你可以这样做:
$('#foobar').whatever();

没有冲突模式下,您需要这样做:
var jq = jQuery.noConflict();
jq('#foobar').whatever();

少了一件要担心的事情。我想原型提供了类似的功能,雅虎也是如此。

但无论如何,我不想过度推崇jQuery并让人们生气,但无论选择哪个库,我认为它们都可以满足你所需的几乎所有功能。特别是考虑到不需要学习三个不同的库的好处。

这三个库都应该有能力。选择你最喜欢的一个并扩展它。 :)


据我所知,Prototype没有这样的功能。jQuery将所有东西命名空间化在“jQuery”对象内,而Prototype的函数则散布在数十个自定义和内置类中,因此要做到这一点非常困难。 - Kuba Suder
就雅虎而言,如果我记得正确的话,它会将所有内容隐藏在一个叫做“雅虎”或类似名称的命名空间中,因此默认情况下不会与任何内容发生冲突。 - Kuba Suder

1

最好的策略是不要使用多个库。虽然想要在问题上投入更多的库很诱人,但这是低效、容易出错的,并且会让代码难以被他人维护。

在大多数情况下,您应该能够通过了解您的问题域和哪个库将帮助您最好地解决它来避免使用多个库。同时,所有这些库都有大量的插件和扩展程序。

例如,JQuery支持跨域JSONP调用,并且在JQueryUI中具有漂亮的小部件库,而Prototype则没有。

$.getJSON('http://anothersite.com/mashup.json?callback=?', function(data) { });

Prototype具有非常好的面向对象支持,并且遍历DOM很容易,但缺少创建小部件和混搭所需的跨域功能。

var Foo =  Class.create({  
  initialize: function(name) {
    this.name = name;
  }   
});

var Bar = Class.create(Foo, {
  initialize: function($super, name)  {
     $super(name);
   }
});

Mootools拥有出色的效果、良好的OO支持、非常稳定的小部件和跨域请求,但(这可能只是我的印象),开发社区与全球社区(mootools之外)的合作和社交不如其他社区(Prototype曾经是这样)。这可能是他们的主要开发人员居住在美国以外,因此无法参加太多会议并参与更大的社区所致。我不会让这完全阻止你,但这是需要记在心里的事情。

1

我目前正在项目中同时使用jQuery和仅javascript文件版本的Microsoft ajax工具包。

我想我会选择jQuery并最终删除Microsoft。我对jQuery非常陌生,但是越了解它,越喜欢它。


0

Ruby on Rails 默认同时使用 prototype 和 Scriptaculous,因为两者之间几乎没有重叠。我还额外使用了 yui 片段,并且从未遇到过问题。加载时间是一个问题,但这些库通常会被缓存,所以只在第一页加载时才会有影响。


1
Scriptaculous是Prototype的一个附加组件,这就是它们能够很好地协同工作的原因。 - Till

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接