2015 年更新:
在 2011 年的这个答案中,我谈论的是 jQuery、YUI 或 Prototype 之类的库。到了 2015 年,这种推理仍然适用于 Angular、React 或 Ember 等框架。在这 4 年里,技术取得了巨大的进步,尽管我看到的对 React 或 Angular 的偏见比对 jQuery 或 YUI 的偏见少得多,但同样的想法——尽管程度较轻——今天仍然存在。
2016 年更新:
我强烈推荐几天前发表的一篇文章:
- 为什么是jQuery?作者:Michael S. Mikowski,Single Page Web Applications一书的作者
那篇文章基本上是对这个问题的非常详细的回答。如果在我写下面的答案时它可用 - 我肯定会引用它。
原答案:
我将回答有关 jQuery 的问题,但这些都是我听到的反对使用 YUI、Prototype、Dojo、Ext 和其他少数人的相同论点。我听到的主要论点:
文件大小,实际上在jQuery 3.2.1 的情况下为 84.6 KB - 可能比一般网站上的徽标小,并且可以从 Google 的 CDN 提供,它可能已经在大多数访问者的缓存中。由于使用 jQuery 总是意味着您自己的 JavaScript 文件的文件大小更小,因此它实际上可能意味着更小的下载,即使尚未在浏览器缓存中。
速度- 编写纯 JavaScript 可能会更快,但是对于大多数人来说,编写可移植的JavaScript 似乎是不可能的。一个速度更快但不适用于所有流行浏览器的网站在现实世界中毫无用处。此外,jQuery 使用了一些非常繁重的优化,实际上非常快,并且在每次发布时都会变得更快,因此除了琐碎的示例之外,手动编写更快的代码实际上并不容易。(*)
“知识产权” ——一家公司害怕使用别人的代码——而事实上 jQuery 是开源和免费软件,从你奶奶的博客到亚马逊,从 Twitter 到美国银行,从谷歌到微软——如果他们可以的话使用它然后任何公司都可以使用它。
我不记得听到任何其他被认真使用的论点。
(*) 这是一个简单的例子:getElementById('someid') vs. jQuery('#someid')
使用 getElementById 更快吗?是的。当然,当 Blackberry 4.6 返回不再存在于文档中的节点时,每个人都会检查 parentNode 以进行捕获,对吗?jQuery 可以。而且每个人都会处理IE和Opera按名称而不是ID返回项目的情况,对吗?jQuery 可以。如果您不这样做,那么您的代码就不可移植,并且您会引入难以发现的细微错误。getElementById 是人们可能找到的最简单的例子——甚至不要让我开始研究事件、AJAX 和 DOM ......
更新:
询问为什么有人不想使用 jQuery 实际上还有第四个结果。我忘了把它放在这个清单上,因为它不是真正的答案,而是缺乏任何答案。我昨天收到的评论让我想起了它。这几乎不是要添加到列表中的“技术原因”,但可能仍然很有趣,实际上可能是最常见的react。
不过,我个人怀疑所有这些react的主要原因是我认为计算机科学进步的最大障碍:“我不想使用它,因为我从未使用过,因此它必须没那么重要。”
它曾经是对优化汇编器、编译器、结构化编程、高级语言、垃圾收集、面向对象编程、闭包或我们现在认为理所当然的几乎所有东西的react——今天它是 AJAX 库。也许有一天没有人会记得我们曾经在应用程序级别上手动与原始 DOM API 交互,就像现在没有人记得我们曾经使用原始的、朴素的、难以理解的十六进制数字编写程序。