支持多个JS库

时间:2010-02-23 16:59:14

标签: javascript jquery dojo

我使用Dojo开发了一个模块。它非常好,我在Dojo中做了很多自定义插件和服务器支持,允许AJAX调用,与我的服务器进行RPC + SMD通信。

然而,现在我正在进入用户方面,我看到jQuery有一些非常好的已经构建的插件。您是否认为可以实际支持这两个JS库而不是一个大问题?

我可以实现哪种集成?有没有人有这方面的经验?

我可能已经在Dojo的30k行地区为我的管理面板写了一些内容......

5 个答案:

答案 0 :(得分:7)

jQuery非常善于不搞乱内置javascript对象的原型(与Prototype不同),这使得它可以非常容易地与其他库一起使用。

潜在冲突的根源是jQuery使用$作为jQuery的快捷方式。我不是dojo用户,但如果这与dojo有某种冲突,那么instructions会解决这个问题。

那就是说,我认为你最好看看这些jquery插件并重写它们并将它们移植到dojo。我相信道场社区会很感激它,它会给你经验。这也使你的应用在腰部区域变得更苗条。

编辑:我注意到一些答案使得添加额外库的下载速度变得微不足道。我带着一粒盐。

作为开发人员,我们倾向于只看到通过localhost或从100 Mbit LAN上的开发服务器下载库所需的额外10ms。从加利福尼亚到弗吉尼亚州,特别是从美国到欧洲,下载速度如此微不足道。此外,它还会增加客户端javascript引擎的负担。如果他们使用带有Safari或Chrome的1-2岁计算机,这可以忽略不计,但如果他们使用IE,FF2或某些版本的FF3,差异可能会很大,或者至少是可衡量的。

答案 1 :(得分:1)

当使用2个库时(我相信它们都被设计为自己使用),你有两个主要的担忧:

  1. 那个图书馆会影响另一个。
  2. 依赖于2个库会使你的页面膨胀。
  3. 在这种情况下,我敢打赌#1不会发生。虽然#2仍然是一个问题。

答案 2 :(得分:1)

大多数流行的JS库都可以限定为自己的全局快捷方式。可以将JQuery设置为不初始化$变量。抛开JQuery,我听说Dojo和Prototype可以在没有冲突的情况下协同工作。

无论您决定使用哪种JS库组合,获取兼容性问题信息的最佳方法是访问与您将彼此使用的JS库相关的邮件列表。

  1. http://docs.jquery.com/Using_jQuery_with_Other_Libraries
  2. http://www.dev411.com/blog/2006/06/13/dojo-and-prototype-together

答案 3 :(得分:1)

Query.noConflict()提供了相当简单的互操作性,因为您可以重新定义$。由于hobodave引起了人们的注意,Prototype在这方面很糟糕(因为你不能轻易地用Prototype重新定义$)。我不确定,但我认为Dojo没有自己的任何问题,并且与其他开箱即用(如果不是这样,请有人纠正我)。

我遇到的最大问题是在特定框架中编写的“必须拥有”的库的数量,例如复杂的图形,从头开始实现这些都是非常重要的。

膨胀很糟糕,但与图像大小相比,JS脚本大小的关注度可以忽略不计(因为它非常小,连接速度非常快,只有在第一页加载时才能获得正确的缓存,这几乎不是问题)。我认为可维护性更令人担心,而且这是一个决定你是否想要那个必须拥有的插件的问题,你没有时间或倾向于在你正在使用的任何框架中重新发明。

答案 4 :(得分:0)

我在几个项目中使用了Prototype,jQuery和ExtJS(出于各种原因),并且几乎总是一起使用jQuery和ExtJS。限制麻烦的一种方法是避免在任何给定页面中混合库 - 将Admin页面保持为dojo,将新页面保持为jQuery - 但这会有什么乐趣? :-)

在集成jQuery和ExtJS时,我发现几个问题。我选择了一个类/对象/继承的框架(我使用ExtJS)并坚持下去。然后,我使用ExtJS创建大多数小部件,我使用jQuery进行低级DOM操作和简单的小部件。同样,我不记得在使用两个库时遇到冲突,但FireBug是发现此类冲突的可疑原因的好工具。