使用多个AJAX库的最佳策略是什么?

时间:2008-09-13 06:14:52

标签: jquery ajax yui prototypejs scriptaculous

您可以分享使用多个AJAX库的经验吗?

Prototype中有一些有用的功能,jQuery中的一些功能,雅虎库等等。是否可以包含所有库并使用你想要的每个库,它们通常都可以与名称空间一起使用,等等。对于速度的考虑,是否存在对要包含的库的大小/数量的实际限制,或者这可忽略不计?是否存在特别适合的对(例如Prototype / Scriptaculous)或不对的对?

7 个答案:

答案 0 :(得分:9)

您可以使用所有这些库,但我强烈建议不要使用它。下载并执行那么多JavaScript很可能会阻塞浏览器并降低用户的体验。从用户的角度来看会更好,而开发人员则会选择一个。减少上下文/体系结构切换,减少维护代码。

像其他答案一样,大多数都没有冲突。

有关详细信息,请参阅Yahoo!的Exceptional Performance网站。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

YUI非常强大的命名空间,因此不应与其他库冲突。

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

Prototype 确实在某些问题上与其他库一起玩得很好,部分原因是因为它(或以前)修改了像Array这样的核心对象。 Protosafe试图解决这些问题。

Script.aculo.us只是一个位于Prototype之上的小部件库,所以这两个应该可以很好地一起玩。

所有这些意味着你可以使用YUI,jQuery,Prototype&您的应用程序中有Script.aculo.us,但您可能会发现使用单个库可以更轻松地维护它。

答案 3 :(得分:2)

我也是jQuery的信徒,所以原谅我对其他人缺乏了解,但是......

使jQuery如此出色的原因是无冲突模式,例如,您可以这样做:

$('#foobar').whatever();

在无冲突模式下,您可以这样做:

var jq = jQuery.noConflict();
jq('#foobar').whatever();

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

但无论如何,我不想过多地提倡jQuery并让人生气,但无论你选择什么样的库,我认为他们都可以做你需要的一切。特别要考虑 必须学习三种不同库的好处。

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

答案 4 :(得分:1)

我现在正在项目中并行使用jQuery和javascript文件版本的Microsof ajax工具包。

我想我将使用jQuery并最终删除Microsoft。我对jQuery很新,但是我越了解它,我就越迷恋。

答案 5 :(得分:1)

最佳策略是不使用多个库。想要在一个问题上抛出更多的库是很诱人的,但它效率低下,容易出错,并且让你的代码更难以维护。

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

例如,JQuery支持开箱即用的跨域JSONP调用,并且在JQueryUI中有一个很好的小部件库,Prototype没有。

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

Prototype具有非常好的OO支持,并且很容易遍历DOM,但缺少创建小部件和mashup所需的一些跨域功能。

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曾经是这样)。这可能是他们的主要开发人员居住在美国以外的结果,因此无法参加尽可能多的会议并参与更大的社区。我不会让那完全阻止你,但是要记住这一点。

答案 6 :(得分:0)

Ruby on Rails默认使用原型和Scriptaculous,因为两者之间几乎没有重叠。除此之外我还使用了yui片段并且从未出现过问题。加载时间是一个问题,但库通常是缓存的,所以它只在加载的第一页上。