上下文 我对前所未有的HTML,Javascript和CSS以及忽略工具(如jQuery(或其他等效的帮助框架))的数量感到震惊强>拒绝使用它们。我不是在谈论JavaScript专家,我每天都在谈论战壕中的乔生产开发人员。我得到了许多更多的借口或个人观点的论据,我认为这些论据没有任何技术价值,我想确保我不会错过任何东西。
问题: 有哪些经验技术原因不使用jQuery?
我不是在寻找宗教或教条论点或主观意见“就像其他一些框架更好”,认为jQuery是问题中所有类似框架的稻草人。
答案 0 :(得分:124)
在2011年的答案中,我谈论的是像jQuery,YUI这样的库 或原型。今天在2015年,这种推理仍然适用于 Angular,React或Ember等框架。在那4年中 虽然我看得太多,但技术进步很大 对我的反对jQuery或者反对比React或Angular更少的偏见 YUI,同样的想法 - 尽管程度较小 - 仍然存在 今天。
我强烈推荐几天前发表的一篇文章:
- Why jQuery?作者:单页Web应用程序书的作者Michael S. Mikowski
这篇文章基本上是一个非常详细的答案 题。如果我在写下面的答案时可以使用它 - 我肯定会引用它。
我将回答有关jQuery的问题,但这些是我听过的反对使用YUI,Prototype,Dojo,Ext和其他几个人的论点。我听到的主要论点是:
文件大小,在jQuery 3.2.1的情况下实际上是84.6 KB - 可能比一般网站上的徽标小,并且可以从Google的CDN提供已经在大多数访问者的缓存中。由于使用jQuery总是意味着您自己的JavaScript文件的文件较小,它实际上意味着较小的下载,即使尚未在浏览器缓存中。
速度 - 编写纯JavaScript可能会更快,但编写 portable JavaScript对于大多数人来说似乎是不可能的。一个速度更快但不适用于每个流行浏览器的网站在现实世界中毫无用处。除了jQuery使用一些相当重的优化实际上非常快,并且每次发布都会变得更快,所以除了琐碎的例子之外,用手写更快的代码实际上并不那么容易。(*)
“知识产权” - 一家公司害怕使用其他人的代码 - 而事实上jQuery是开源和自由软件,可以从您祖母的博客到亚马逊,从Twitter到处使用到美国银行,从谷歌到微软 - 如果他们可以使用它,那么任何公司都可以使用它。
我不记得听到任何其他论据被认真对待。
(*)这是一个简单的例子:getElementById('someid')与jQuery('#someid')
更快地使用getElementById吗?是。当然,当Blackberry 4.6返回不再存在于文档中的节点时,每个人总是检查parentNode,对吧? jQuery呢。每个人都处理IE和Opera按名称而不是ID返回项目的情况,对吧? jQuery呢。如果你不这样做,那么你的代码是不可移植的,并且你会引入一些很难找到的细微错误。而getElementById是人们可能找到的最简单的例子 - 甚至不让我开始使用事件和AJAX以及DOM ...
实际上有第四个结果是询问为什么有人不想使用jQuery。我忘了把它放在这个列表上,因为它不是一个真正的答案,而是任何答案的缺乏。我昨天得到的comment让我想起了这件事。这不是添加到列表中的“技术原因”,但可能仍然很有趣,实际上可能是 最常见的反应。
我个人怀疑是所有这些反应的主要原因,但我认为这是计算机科学取得进步的最大障碍:“我不想使用它,因为我从来没有这样做,因此它一定不是那么重要。“
它曾经是对优化汇编程序,编译器,结构化编程,更高级语言,垃圾收集,面向对象编程,闭包或几乎我们现在认为理所当然的所有事情的反应 - 现在它是AJAX库。也许有一天,没有人会记得我们曾经在应用程序级别上手动与原始DOM API进行交互,就像现在没有人记得我们曾经使用raw, unadorned, inscrutable hexadecimal numbers编写程序一样。
答案 1 :(得分:23)
jQuery在以DOM为中心的范例中表达所有,这可能会产生误导,并且不需要在应用程序模式中表达任何内容。
许多开发人员最终将这些以DOM为中心的模式编程到一个角落,并最终意识到他们没有创建任何可扩展或可重用的东西。
Rebecca Murphey对她自己切换到Dojo from jQuery有一个很好的记录 - 博客文章更多的是关于为什么不 jQuery与为什么 Dojo。< / p>
答案 2 :(得分:18)
不使用框架的一个原因 - 这是一个极端的边缘案例 - 是在为另一个网站(例如横幅)编写可嵌入代码时。任意插入一些复杂的库或其他将污染命名空间并可能破坏其他人的网站。并不是说我不会试图通过一些广告商来尝试,池塘吮吸渣滓,但我离题了......
我不赞成添加一个框架,当一个框架已经存在且同样有能力时。我经常看到它,这是我的宠物仇恨,我认为这是毫无根据的臃肿。这完全是另一个问题。
除此之外,我无法想到一个不合理的理由。
答案 3 :(得分:11)
filesize - 但实际上,除此之外,它是跨平台javascript和浏览器差异的绝对神派。你必须有一些很好的理由不要在你的工具包中使用它(或者是一个原教旨主义的开发人员白痴)。
答案 4 :(得分:7)
答案 5 :(得分:5)
答案 6 :(得分:4)
无论如何,我喜欢jQuery,但有一些理由不使用jQuery:
答案 7 :(得分:3)
因为经常这是不必要的。 如果我想要做的就是验证一些输入,或者在某些字段中使用hilight,那么编写简单的javascript / dom代码同样容易。并且jQuery在这种简单的情况下并没有真正帮助,所以问题应该是为什么使用它?
很明显,在很多情况下它非常有用,但有时人们似乎也没有真正的理由使用它。
答案 8 :(得分:2)
我更喜欢使用jquery进行dom操作或遍历dom,这对于jquery来说非常简单。此外,使用jquery或其他框架附加事件或事件委托非常容易,否则您必须为IE或非IE浏览器等编写自定义事件附件。
但是当你使用$ .each而不是vanilla JS for和array.push()时,它会有一些性能损失...... 其他问题,如果你绑定一个事件并删除它没有解除绑定它将有内存泄漏....
我的结论只是使用任何框架进行复杂的dom操作和休息使用vanilla JS
答案 9 :(得分:2)