问题是
您是否曾在同一个页面上使用过两个 JavaScript 库?
我在创建此投票时的想法围绕着两个主题
- 为教育人们在一个页面上使用多个库通常不是一个好主意,而且没有必要提供借口。
- 揭示在同一个页面上使用多个库很有用或需要的有趣场景。
我特别指的是那些用于简化 JavaScript 工作的通用辅助库:jQuery、MooTools、Dojo、Prototype 等。它们具有 DOM 操作工具、选择器引擎、AJAX 助手等。我认为这是大多数人在想到“库”时想到的。在使用这些库的多个版本时,通常会遭到反对,并被认为没有必要。除了它是额外的带宽,并且如果管理不当会导致冲突外,这些库执行许多相同的功能,并且大量重复的功能几乎没有好处。
以下是结果
毫不奇怪,“否”获得了第一名,占投票的 60%,但这 60% 并不是我预料到的压倒性多数。有整整 40% 的人表示,是的,他们在同一个页面上使用过多个 JavaScript 库。即使有 27% 的人表示他们使用多个库,但没有感到内疚,我认为我们没有得到任何有说服力的评论详细说明这种做法合理的用例。这可能是因为……
通常,投票存在缺陷
此投票的问题在于“JavaScript 库”的定义不够明确。正如我上面所说,我在此投票中所说的库是通用库,但“库”可以指代更多内容。Twitter 的 @anywhere 是一个 JavaScript 库,Modernizr 是一个 JavaScript 库,Raphaël 是一个 JavaScript 库。将它们与通用库一起使用完全没有问题,因此在这种情况下,使用多个库根本不是什么大不了的事情。我相信这是许多人在投票支持使用多个库时想到的。
最后的想法
如果您对此事有任何最终想法,请说出您的想法。本周晚些时候会进行新的投票。
我听说过“JavaScript 框架”和“JavaScript 库”这两个词可以互换使用。它们是一回事吗?
我认为“jQuery、Mootools、Prototype 等”是框架,而“Modernizer、@nywhere API 等”是库。
是的,这确实是“缺陷”……这哥们不知道 js 库和 js 框架之间的区别吗?…… come on :/
如果由我决定,我也会投赞成票。
@Harry – 别怪我:http://cl.ly/2fFC
我使用过多个库(或框架),因为客户特别要求我使用除了 jQuery 之外的插件……因为我用 jQuery 自己编写的所有内容……后来感到内疚 :)
一个好的 JS 库或框架不会乱动全局范围或原生对象的原型,因此兼容性问题不应引起关注。例如,Dojo 明确支持在一个页面上使用多个版本的自身!
为什么?因为在大型项目中,开发工作跨越多个开发人员和多年,这样做是有必要的。这不是理想的,但这是现实!
这里有一个用例供你参考
我想要非常简单的 DOM 操作,所以我选择 jQuery,但我也想要一种正确的方式来表示内部数据,而且因为 JavaScript OOP 有点奇怪,所以我选择 Prototype(或 mootools – 我个人使用 Prototype)来模拟良好的直观 OOP。
当然,我想要它超级快,这就是我选择 js API/库(在我看来不是框架)的原因。
当然,这仅仅适用于大型项目,我 4 年内只做了两次。
关于 Prototype 修改原生的习惯,好吧,那是你的项目需要承受的。反正这是最好的选择。
MooTools 提供非常简单的 DOM 操作 *和* 漂亮的 OOP。:P
我以为你是指这样
但我猜错了。因为它们是 jQuery。所以我真的不知道你的意思。我选择了“否”,因为我以为你是指将它们用于不同的操作,就像如果你使用一个用于 jQuery 幻灯片,而另一个不是你创建的。我不知道,我完全糊涂了,至今如此。
我曾经在一个项目中经常遇到这个问题。我们在使用 rails,所以我们已经使用了很多生成 prototype 代码的 rails ajax 助手。后来我们需要使用一些 jQuery 插件,这会导致与 prototype 发生冲突。
我们使这两个框架协同工作,但我真的很讨厌同时运行这两个框架。幸运的是,我们找到一个具有相同功能的 prototype 插件,并切换到了它。
恕我直言,使用多个框架是一个糟糕的主意。大多数 javascript 框架都提供了足够强大的功能,不需要其他任何东西。
一旦我听到诸如 DOM、原生对象原型之类的术语,我的眼睛就会变得呆滞。我从未坐下来真正了解除了 HTML、PHP 和 CSS 之外的任何东西是如何工作的,所以我根本不知道这些术语的含义。圣诞节假期会学习这些。我只知道“做这个 = 发生这个”。猴子看到,猴子做。
也许下一个投票应该问是库还是框架?哈哈
不是开玩笑吧?
这就是它们的称呼
jQuery = 库
YUI = 库
ExtJS = 库
MooTools = 框架
Prototype = 框架
Dojo = 工具包
我以为它们都是一样的。我猜每天都会学到新东西。
Criss,也许是时候写一篇帖子解释每种类型的区别以及何时(以及何时不)使用它们了,因为我们很多人都误解了这些术语。:)
MooTools 比 jQuery 做得更多……jQuery 真的只关注 DOM 方面。参见 http://jqueryvsmootools.com/。有些人会认为 jQuery 是一个“库”,仅仅因为它专注于 DOM 方面。
框架在其底层库的基础上提供了更多功能,例如现成的手风琴菜单、模式对话框、图片放大器等。因此,框架通常可以被视为一个大型的、包含在一个漂亮包中的插件集合。这就是为什么 MooTools 比 jQuery 功能更多的原因——因为在 jQuery 中,你仍然需要在上面编程所有花哨的东西。
jQuery 也确实有自己的框架——它叫做 jQuery UI :-) 但是,我倾向于不使用它,因为它在只需要几个小型插件时会增加很多开销。
此外,我认为 Prototype 是一个库,而它受人尊敬的框架应该是 Scriptaculous。
再说一次,与其他人的观点相比,我的定义可能错了。
这其实不是不知道框架和库之间区别的问题。更多的是语义问题。正如 Chris 刚刚发布的那样,它们都有自己对真实含义的理解。对我来说,“库”比“框架”更合适。当我看到“框架”这个词时,我倾向于想到定义架构结构的东西,比如 Rails 或 CakePHP。主要的 javascript 库实际上只是库:包含用于简化 javascript 使用的工具集合的库。它们没有定义(甚至推荐)任何特定的结构或“框架”。
实际上,就 YUI3 而言,YUI 绝对算得上是一个“框架”,因为它为复杂应用提供了极其丰富的结构和架构模式。
我相信 ExtJS 和 Dojo 也能被视为框架。
我们尽量将项目限制在一个库中,就像投票结果一样,发现 jQuery 涵盖了大部分基础,喜欢 jQuery!LT
关于这个关于投票结果的多个 JavaScript 的分享很棒,非常有用。感谢分享。
有趣的问题,这最近一直是我开发中的一个问题。简而言之,这个问题只在使用 WordPress(插件泛滥)时出现。你无法永远使用同一个版本运行多次,否则你肯定会遇到麻烦。如果你很紧急,就谷歌搜索“JQuery NoConflict”,然后为你的解决方法感到羞愧。
我个人尝试将其限制在一个以内,但这只是我个人习惯:D
再次,这取决于你在做什么以及你的预算……如果页面预算很高,那么答案是 NO,但如果我正在做一个低预算的页面,我通常会使用现有的 Joomla 模块/插件/…而不关心它们使用哪个库。
如果可以,我通常会尝试将自己限制在 jQuery 和也许 MooTools 上。我还会查看速度是否会成为排名因素(竞争方面)。
像往常一样,这取决于你想做什么,你投入多少时间以及你得到了多少报酬:)
别忘了人类因素的缺陷……就像,“我确实使用多个……但我不想看起来像个白痴。”不过,这是个很棒的投票。感谢分享。
我所有的 JavaScript 需求都使用 jQuery。
说实话,我唯一用过的就是 jQuery。我不是一个真正的“编程人员”,所以我尽量减少必须做的编程(php、javascript)等,除了像构建 WordPress 或 Drupal 主题等基本内容以外。
话虽如此,我认为即使我知道的不仅仅是 jQuery,我仍然只会在一个页面上使用一个库。通常,如果有一个说是一个 Mootools 插件的插件,90% 的情况下,除非它不是一个很流行的插件,否则有人在某个地方为 jQuery 修改了它。
我可以将这个投票与服务器端选择联系起来。JavaScript 是一种语言,就像 PHP 一样。jQuery、Mootools 和 Dojo 都是框架,就像 CakePHP 或 CodeIgniter 一样。因此,这些库/框架只是帮助你更容易地编写 JavaScript 的工具。它们都足够强大,没有必要将它们混合使用。恕我直言,同时使用两个框架的人只是懒得重写一些代码来只使用一个框架。当你理解了这一点之后,毕竟,它只是 JavaScript,事情会变得更容易。我认为问题是人们试图使用框架来学习 JavaScript。这就像使用水上摩托车来学习游泳。
以上所有!
1.) 不 - 我尽量避免它。2.) 但是是的,当必须这样做时我会这样做,例如当之前的开发者用 Prototype 相关的函数填满了网站,而我想使用 Jquery 因为我更熟悉它。
最后,我认为我有充分的理由这样做,但仍然对此感到内疚。感谢 Jquery 的 NoConflict() 声明,一切正常,这没什么大不了的。
但实际上,1.) 不。
非常有用的脚本,很好的解释,感谢你的帖子。
是的,使用多个 JS 库是一个不好的主意。