使用多个 AJAX 库的最佳策略是啥?
Posted
技术标签:
【中文标题】使用多个 AJAX 库的最佳策略是啥?【英文标题】:What are the best strategies for using multiple AJAX libraries?使用多个 AJAX 库的最佳策略是什么? 【发布时间】:2010-09-08 18:57:24 【问题描述】:您可以分享使用多个 AJAX 库的哪些经验?
在 Prototype 中有一些有用的功能,在 jQuery、Yahoo 库等中有一些有用的功能。是否可以包含所有库并使用您想要的每个库,它们通常都可以很好地与命名空间等一起使用。对于为了速度,要包含的库的大小/数量是否有实际限制,或者这可以忽略不计?有没有特别好的配对(例如 Prototype/Scriptaculous)或不适合的配对?
【问题讨论】:
【参考方案1】:您可以使用所有这些库,但我强烈建议不要这样做。下载和执行这么多 javascript 很可能会阻塞浏览器并降低用户体验。从用户和开发人员的角度来看,选择一个会更好。更少的上下文/架构切换和更少的代码维护。
就像其他答案所说的那样,大多数都不冲突。
有关详细信息,请参阅 Yahoo! 的 Exceptional Performance 网站。
【讨论】:
【参考方案2】:您可以使用Google AJAX Libraries API。 它为 jQuery、prototype、script.aculo.us、MooTools 和 dojo 提供了一个通用的分发网络和加载架构
【讨论】:
【参考方案3】:YUI 具有很强的命名空间,因此不应与其他库发生冲突。
如前所述,您可以在无冲突模式下运行 jQuery。
原型确实在与其他库配合使用时存在一些问题,部分原因是它(或曾经)修改了诸如Array
之类的核心对象。 Protosafe 试图解决这些问题。
Script.aculo.us 只是一个位于 Prototype 之上的小部件库,因此这两者显然应该很好地结合在一起。
所有这一切意味着您可以在您的应用程序中使用 YUI、jQuery、Prototype 和 Script.aculo.us,但您可能会发现使用单个库可以更轻松地维护事物.
【讨论】:
【参考方案4】:我也是一个 jQuery 信徒,所以请原谅我对其他人缺乏了解,但是...
让 jQuery 如此出色的是无冲突模式,例如,您可以这样做:
$('#foobar').whatever();
在无冲突模式下,您可以这样做:
var jq = jQuery.noConflict();
jq('#foobar').whatever();
少了一件需要担心的事情。我想原型提供了类似的功能,雅虎也一样。
但无论如何,我不想过多地提倡 jQuery 并使人们发疯,但是无论您选择什么库,我认为它们都可以完成您需要的几乎所有事情。尤其要考虑不必学习三个不同库的好处。
这三个都应该有能力。选择您最喜欢的并扩展它。 :)
【讨论】:
AFAIK Prototype 没有这样的功能。 jQuery 将“jQuery”对象内的所有内容都命名为命名空间,而 Prototype 的功能分散在数十个自定义和内置类中,因此很难做到。 至于雅虎,如果我没记错的话,它会将所有内容隐藏在名为“yahoo”之类的命名空间内,因此默认情况下它不会与任何内容发生冲突。【参考方案5】:我现在在项目中并排使用 jQuery 和仅 javascript 文件版本的 Microsof ajax 工具包。
我想我会使用 jQuery 并最终删除 Microsoft 的。我对 jQuery 很陌生,但是我对它了解得越多,我就越迷恋它。
【讨论】:
【参考方案6】:最好的策略是不要使用多个库。想要在一个问题上投入更多的库是很诱人的,但它效率低下,容易出错,并且使您的代码更难被其他人维护。
在大多数情况下,您应该能够通过了解您的问题领域以及哪个库最能帮助您解决问题来避免使用多个库。所有这些库还有无数的插件和扩展。
例如,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 之外)没有那么协作和社交和其他社区一样(原型曾经是这种方式)。这可能是由于他们的主要开发人员居住在美国以外,因此无法参加尽可能多的会议并参与更大的社区。我不会让这完全阻止你,但要记住这一点。
【讨论】:
【参考方案7】:Ruby on Rails 默认同时使用原型和 Scriptaculous,因为两者之间几乎没有重叠。除此之外,我还使用了 yui sn-ps 并且从未遇到过问题。加载时间是个问题,但库通常会被缓存,所以它只在加载的第一页上。
【讨论】:
Scriptaculous 是原型的附加组件。这就是为什么它们可以很好地协同工作。以上是关于使用多个 AJAX 库的最佳策略是啥?的主要内容,如果未能解决你的问题,请参考以下文章