很多人提倡“只使用纯 JavaScript,根本不需要 jQuery”。好吧,很多东西确实是我不需要的,尽管它们可能都很好。我可能也不需要 jQuery,但它确实也很好。

有些文章试图告诉我们:去掉 jQuery 其实是很容易的。但这篇文章在开头却举了一个使用 jQuery 很好的理由:一行简单的 jQuery 代码取代 10 行 vanilla JS(纯原生 JavaScript)代码!

使用 jQuery 的优势

JavaScript API(特别是 DOM API)的很多东西都与我的审美观相去甚远,我这么说算客气的。el.insertAdjacentElement(‘afterend’, other) 固然没有问题,但如果写成 (el).after(other)不是更好吗?虽然我也不是那么喜欢

() 函数,但它再怎样都比 DOM 提供的函数要好得多。

通常你是怎么获取一个元素的兄弟元素的?是 nextSibling 还是 nextElementSibling?它们有什么不一样吗?哪些浏览器支持它们?又或者不支持?为了记住这些,你需要记住或者去查阅 MDN,但如果使用了 jQuery,只需要调用 next() 或者 prev() 方法。

JavaScript API 提供的很多标准操作都很奇怪,我本来可以列出很多,不过上面提到的那篇文章已经列出了一大部分了。

你可能还需要一些辅助函数来完成一些常见的任务,同样,上述的文章也列出了很多这样的函数。而 jQuery 就包含了这些东西,省得你到处拷贝粘贴这类代码。

虽然现在浏览器兼容性问题不像以前那么严重,但仍然是个问题,特别是如果你无法接受“只要 85% 的用户能够使用就可以了”。

是否必须选择 jQuery

那么你要一直使用 jQuery 吗?当然不是了。在项目里添加依赖意味着更大的复杂性和更大的文件体积。不过,jQuery 本身并不大。经过压缩的默认大小为 30K,如果不包含 AJAX 和其他不常用的东西大小只有 23K,如果使用 querySelector 替代 SizzleJS 就只剩下 17K。对于我来说,30K 或者经过优化的 17K 的 jQuery 已经能够满足大部分用途。

从 Bootstrap 移除 jQuery 的案例可以看出,使用纯 JavaScript 的代价是很大的:他们重写了辅助函数,去掉了对 IE 的支持(因为太难了),让 API 变得不兼容,总共花了一年半的时间。从结果来看,我不觉得它比之前好多少。

我明白他们为什么要那么做。人们希望将 Bootstrap 和 Vue.js 放在一起使用,而把 jQuery 和 Vue.js 放在一起又显得很奇怪。我也很赞成我们要避免“Web 膨胀”,但至少也要务实些。在项目里包含 17K 的 jQuery 真的有那么糟糕吗?相比 Medium 或纽约时报这些动不动就要加载上兆 JavaScript 的网站,一个 17K 的 jQuery 就那么让你难以承受吗?

当然,我们也有一些不使用 jQuery 的理由:比如你想要写一些会被别人重用的代码或者小函数。但即使是这样,也不至于要拼了老命避免使用 jQuery。什么东西都用 jQuery 来写不是个好主意,但完全不使用 jQuery 也不是。

我并没有只与 jQuery 为伍,但它的一些优点确实弥补了 JavaScript API 的不足。之前的那篇文章建议使用bonzo$dom,以及其他一些与 AJAX 有关的包,但它们当中大部分似乎已经停止维护了。另外,既然所有人都会使用 jQuery,那么除非非常有必要,否则为什么要用其他东西来替代它?

总结

一些读者可能会想:“那么其他框架呢,比如 Vue.js、React”?其实这篇文章的目的在于比较纯 JavaScript 和 jQuery,而不是要和读者讨论什么前端开发大法。

总的来说,使用纯 JavaScript 也是有理由的,比如我想要开发一个非常快的网站,使用最简单的代码,可以让尽可能多的人访问到。在我看来,服务器端生成的带有“渐进式增强”风格的 JavaScript 通常是最好的方式。这种开发方式速度快,而且容易,bug 更少。

那这是不是意味着 Web 框架就不是好东西了呢?当然不是了。没有什么东西是非黑即白的,它们一般都存在一系列的权衡(jQuery 当然也是)。

我认为,Web 是主要是用来浏览 document 的,而不是一个操作系统。尽管对于很多 Web APP 来说,使用 document 方式也可以很好的进行一些操作。

余下全文(1/3)

本文最初发表在www.infoq.cn,文章内容属作者个人观点,不代表本站立场。

分享这篇文章:

请关注我们:

发表评论

电子邮件地址不会被公开。 必填项已用*标注