代码之家  ›  专栏  ›  技术社区  ›  Layke

支持多个JS库

  •  3
  • Layke  · 技术社区  · 14 年前

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

    然而,现在我开始了解用户方面的事情,我看到jquery有一些非常好的已经构建的插件。您认为现实地支持两个JS库而不成为大问题是可能的吗?

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

    我可能在Dojo的30K行区域的某个地方为我的管理面板写过…

    5 回复  |  直到 14 年前
        1
  •  7
  •   hobodave    14 年前

    jquery很好地解决了内置JavaScript对象的原型(与原型不同),这使得它可以很容易地与其他库一起使用。

    潜在冲突的来源是jquery使用 $ 作为 jQuery . 我不是Dojo用户,但是如果这在某种程度上与Dojo冲突,那么 instructions 解决这个问题。

    这就是说,我认为您最好看看这些jquery插件,重写它们并将它们移植到dojo。我相信Dojo社区会感激它,它会给你经验。这也会使你的应用程序在腰部区域更薄一些。

    编辑: 我注意到有几个答案对增加一个附加库的下载速度无关紧要。我要这个加一粒盐。

    作为开发人员,我们往往只看到通过本地主机或从100兆局域网上的开发服务器下载库所需的额外10毫秒。下载速度为 从加利福尼亚到弗吉尼亚,特别是从美国到欧洲,都是如此微不足道。此外,它还增加了客户端JavaScript引擎的负担。如果他们使用的是1-2岁的孩子 好的 带有Safari或Chrome的电脑,这可以忽略不计,但如果它们使用IE、FF2或某些版本的FF3,则差异可能很严重,或者至少是可以测量的。

        2
  •  1
  •   Gabriel McAdams    14 年前

    当使用两个库(我确信这两个库都是为自己设计的)时,您有两个主要担心:

    1. 一个图书馆会影响另一个。
    2. 依赖两个库会使页面膨胀。

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

        3
  •  1
  •   Damien Wilson    14 年前

    大多数流行的JS库都可以使用自己的全局快捷方式。jquery可以设置为不初始化 $ 变量。撇开jquery不谈,我听说dojo和原型可以一起工作而不会产生冲突。

    无论您决定使用哪种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
        4
  •  1
  •   Iain Collins Ryan    14 年前

    query.noconflict()使互操作性变得相当容易,因为您可以重新定义 $ . 当Hobodave引起人们的注意时,原型在这方面很糟糕(因为你不能轻易地用原型重新定义美元)。我不确定,但我认为Dojo本身没有任何问题,可以和其他人一起玩得很好(如果不是这样,请有人纠正我)。

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

    膨胀很糟糕,但与图像大小相比,JS脚本大小的问题可以忽略不计(因为它太小,连接也太快,而且只有在第一页加载时才能正确进行缓存,这几乎是没有问题的)。我想说的是,维护性更让人担心,这是一个决定你是否需要插件的问题,而你没有时间或倾向于在你使用的任何框架中进行重新设计。

        5
  •  0
  •   Upperstage    14 年前

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

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