[英]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仍然是一个问题。
大多数流行的JS库都可以限定为自己的全局快捷方式。 可以将JQuery设置为不初始化$
变量。 抛开JQuery,我听说Dojo和Prototype可以在没有冲突的情况下协同工作。
无论您决定使用哪种JS库组合,获取兼容性问题信息的最佳方法是访问与您将彼此使用的JS库相关的邮件列表。
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.