繁体   English   中英

支持多个JS库

[英]Supporting Multiple JS libraries

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

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

我可以实现什么样的集成? 有没有人有这方面的经验?

我可能在Dojo为我的管理小组写了30k行的某个地方......

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

潜在冲突的根源是jQuery的使用$作为一个快捷方式jQuery 我不是dojo用户,但是如果这与dojo以某种方式冲突,那么就有解释这个问题的指令

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

编辑:我注意到一些答案简化了添加额外库的下载速度。 我带着一粒盐。

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

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

  1. 那个库会影响另一个库。
  2. 依赖于2个库会使页面膨胀。

在这种情况下,我敢打赌#1不会发生。 虽然#2仍然是一个问题。

大多数流行的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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM