有什么经验技术原因不使用jQuery?

上下文:我被整天侵入HTML,Javascript和CSS的前端开发人员的数量惊呆了, 忽略了像jQuery( 或其他等效的帮助框架 )这样的工具并拒绝使用它们。 我不是在谈论JavaScript专家,我每天都在谈论Joe生产开发者的壕沟。 我得到很多更多的借口或个人意见,我认为没有任何技术上的优点,我想确保我不会错过任何东西。

问题:不使用jQuery的经验技术原因是什么?

我不是在寻找宗教或教条式的论点或主观意见,“像其他一些框架更好”,把jQuery作为问题中的所有可比较的框架来考虑。

2015年更新:

在2011年的这个答案中,我正在讨论像jQuery,YUI或Prototype这样的库。 今天在2015年,推理仍然适用于像Angular,React或Ember这样的框架。 在这4年中,技术进步非常迅速,尽pipe我看到的对React或Angular的偏见比我看到的对jQuery或YUI的偏见要less得多,但同样的想法 – 尽pipe程度较低 – 至今仍然存在。

2016年更新:

我强烈推荐几天前发表的文章:

  • 为什么jQuery? 由单页networking应用程序书的作者Michael S. Mikowski撰写

那篇文章基本上是对这个问题的一个非常详细的回答。 如果我在写下下面的答案的时候是可用的 – 我肯定会引用它。

原始答案:

我会回答关于jQuery,但这些都是我听说过的使用YUI,Prototype,Dojo,Ext和其他一些的相同论点。 我听到的主要论据是:

  1. 文件大小 ,实际上是jQuery 3.2.1的 84.6 KB – 可能比平均网站上的标志小,可以从Google的CDN提供,这可能已经在大部分访问者的caching中。 由于使用jQuery总是意味着您自己的JavaScript文件的文件较小 ,所以实际上可能意味着更小的下载,即使尚未在浏览器caching中。

  2. 速度 – 写纯JavaScript可能会更快,但写入便携式 JavaScript对大多数人来说似乎是不可能的。 一个更快,但不适用于所有stream行的浏览器的网站在现实世界中是无用的。 除了jQuery使用一些相当繁重的优化,实际上是非常快的,并且每个发行版都保持更快的速度,所以实际上并不是那么简单的手动编写更快的代码。

  3. “知识产权” – 一家公司害怕使用别人的代码 – 事实上,jQuery是开源的和免费的软件,可以从你的祖母的博客到亚马逊,从Twitter到美国银行,从Google到微软 – 如果可以的话使用它,那么任何公司都可以使用它。

  4. 我不记得有任何其他的说法被认真使用。

(*)下面是一个简单的例子:getElementById('someid')与jQuery('#someid')

使用getElementById更快吗? 是。 当然,当Blackberry 4.6返回文档中不再存在的节点时,每个人都会检查父节点,对不对? jQuery的确。 而每个人都处理的情况下,IE和Opera返回项目的名称,而不是ID,对不对? jQuery的确。 如果你不这样做,那么你的代码是不可移植的,你会引入很难find的微妙的错误。 而getElementById是一个可能find的最微不足道的例子 – 甚至没有让我开始事件和AJAX和DOM …

更新:

实际上有第四个结果是问为什么有人不想使用jQuery。 我忘了把它放在这个清单上,因为这不是一个真正的答案,而是没有任何答案。 我昨天得到的评论让我想起了这件事。 这并不是列入清单的“技术原因”,但可能是有趣的,实际上可能最常见的反应。

然而,我个人认为,所有这些反应的主要原因是我认为是计算机科学进步的最大障碍:“我不想使用它,因为我从来没有这样做过,所以它必须不是那么重要。“

它曾经是优化汇编器,编译器,结构化编程,高级语言,垃圾回收,面向对象的编程,closures或几乎所有现在我们认为理所当然的事情 – 而今天它就是AJAX库。 也许有一天,没有人会记得我们曾经在应用程序级别上手动与原始DOM API进行交互,就像现在没有人记得我们曾经用原始的,未经修改的,难以理解的hex数字来编写程序。

jQuery在以DOM为中心的范例中expression了一切 ,这些范例可能会引起误解,并且不需要在应用程序模式中expression任何东西。

许多开发人员用这种以DOM为中心的模式将自己编程到一个angular落,最终意识到他们没有创build任何可扩展或可重用的东西。

Rebecca Murphey写了一篇很好的关于从jQuery转换到Dojo的文章 – 博客文章更多的是关于jQuery为什么不是 为什么 Dojo。

不使用框架的一个原因 – 这是一个极端的边缘情况 – 在为另一个网站(例如横幅)编写可embedded的代码时。 随意插入一些复杂的库或其他将污染命名空间,并有可能打破别人的网站。 不是说我不会把它通过一些广告商试试,吸池塘的渣滓,但我离题了…

当我已经存在并且同样有能力的时候,我不赞成添加一个框架。 我经常看到这一切,这是我讨厌的宠物,我认为这是不必要的膨胀。 这完全是另一个问题。

除此之外,我想不出一个合理的理由。

文件大小 – 但真的,除此之外,这是一个跨平台的JavaScript和浏览器的差异绝对神派。 你将不得不有一些非常好的理由不要在你的工具包(或成为一个原教旨主义的开发人员白痴)。

  • 他们不能certificate文件大小(尽pipe它可能比不使用提供的抽象的脚本小)。
  • 他们不想依赖第三方工具。
  • 他们的业务不想运行任何库(无论出于什么原因)。
  • 他们的业务不想运行任何非员工编写的JavaScript代码。
  • 要实际编码一切,并学习更多。 (而不是使用预编码的东西)
  • jQuery有很多你可能不需要的function,为什么让用户下载这么多的代码,如果它不会被使用?
  • 挑战自己? 我可以打败jQuery,或者至less,我可以用普通的香草代码生存吗?
  • 灵活性:虽然jQuery是非常灵活的…你可能需要一些它不提供…

通过一切手段,我喜欢jQuery,但有一些原因不使用jQuery:

  1. 下载大小/带宽:jQuery 1.5现在超过200K未压缩,因为一些库的大小是太多,以certificate的好处。
  2. 性能:编写本地JS总是比在一个库后面抽象它更快。
  3. 增加了复杂性:许多人会下载整个jQuery库,当他们真的只需要一些简洁的function。
  4. 应用程序依赖关系:依赖关系的引入总是有它的挂起。 如果在jQuery中有一个bug,你可以debugging和编辑这个文件,但是稍后升级会引入问题。 你可以离开这个bug,但现在你依赖于jQuery的时间表来修复,而不是你自己的。

因为经常这是没有必要的。 如果我想要做的只是validation一些input,或者一些字段,那么编写简单的javascript / dom代码也很容易。 在这种简单的情况下jQuery并没有真正的帮助,所以这个问题应该是为什么使用它?

显然,在很多情况下,它是非常有用的,但有时人们似乎也没有真正的理由使用它。

我宁愿使用jQuery来进行dom操作或遍历dom,这对于jquery来说非常简单。 此外,附加一个事件或事件委托是很容易使用jQuery或其他框架,否则你必须编写IE或非IE浏览器的自定义事件附件等

但它有一些性能损失,当你使用$ .each而不是香草JS和array.push()…其他问题,如如果你绑定一个事件,并删除,而不解除它将有内存泄漏….

我的结论是只使用任何框架复杂的DOM操作和rest使用香草JS

为什么不使用jQuery?

我想不出一个好的理由来使用vanilla JavaScript而不是jQuery(除了学习新东西的威胁因素之外),但是有些人更喜欢其他的JavaScript框架(比如优秀的MooTools ),因为它们之间存在哲学上的差异。

有些人根本就不喜欢jQuery的DSL语法,但是他们认识到使用健壮的JavaScript框架的重要性。

就我个人而言,我喜欢 jQuery,但是我认识那些使用其他框架并且效率不低的人。