2019 年了,为什么我还在用 jQuery?
译者按: 看来 jQuery 还是有一些用武之地的。
为了保证可读性,本文采用意译而非直译。翻译仅供学习探讨,不代表 Fundebug 观点。
许多人都在提倡: “直接用原生的 JavaScript 就好了,不需要 jQuery 了”。
You might not need jQuery尝试告诉我们,摆脱 jQuery 是一件很容易的事情。但是,它的第一个例子恰恰告诉我们用 jQuery 其实也不错,因为我们写了 10 行原生的 JavaScript 代码,其实只需要 1 行 jQuery 代码就够了。

很多 JavaScript 的 API,尤其是 DOM 相关的 API,挑战了我的审美哲学,直白点说,我觉得它们太糟糕了!el.insertAdjacentElement('afterend', other)当然也可以用,但是$(el).after(other)更加简洁。$()函数也没那么好看,我没有特别喜欢,但是它比原生的 API 好太多了。
你们如何获取某个元素的 sibling 呢?到底用nextSibling还是用nextElementSibling?它们有什么不同?各个浏览器分别支持哪个方法?当你忙着去 MDN 查文档的时候,我直接用 jQuery 的next和prev()就好了。
许多常用的 JavaScript 的标准 API 都挺奇怪的,这里我就不列出来了,大家去You might not need jQuery看看就知道了。
写代码的时候,我们总会需要使用一些常用的帮助函数,You might not need jQuery列举了很多,使用 jQuery 可以很方便的使用这些帮助函数,这样我们就不需要每次都去 Stack OverFlow 上去复制代码了。。。
浏览器的兼容问题已经没有以前那么头疼了,但是它还是个不小的问题,除非你觉得只要 85%的用户 OK 就行。关于这个问题,大家可以阅读我的Why Hello CSS doesn’t use CSS variables。
那么,我们必须使用 jQuery 吗?当然不是!使用任何第三方库都是有代价的,增加了复杂度,也增加了文件大小。但是,jQuery 其实没那么大,压缩之后的大小只有 30K。如果我们去掉 ajax 以及一些不常用的功能的话,就只有 23K;如果我们使用 querySelector 替代 SizzleJS 来构建的话,则只有 17K 了。无论是 30K 还是 17K,对许多应用来说,这个大小都是完全可以接受的。
大家不妨看看Bootstrap removing jQuery,为了移除 jQuery,他们也是花了不少精力啊:自己撸帮助函数;放弃兼容 IE,因为太难写了;他们花了 1 年半时间来倒腾这个。最终的结果在我看来,这些努力似乎不值得。
我理解他们为什么这么做,大家希望在 Vue 项目中使用 Bootstrap,但是同时使用 Vue 和 jQuery 的话有点傻。对于减少网页大小,我非常同意,也很喜欢Web bloat与The Ethics of Web Performance两篇博客中的观点。但是,我们需要实际一点,不要过于理想主义。添加 17K 的 jQuery 真的那么糟糕吗?当我吐槽 Medium 或者 New York Times 这样的网站需要的 JS 文件超过 1M 的时候,有的人会这样反驳:”莫非你还在用 56k 的带宽?“,但是,为什么 17K 的 jQuery 就那么不能接受了呢?
不用 jQuery 而自己写帮助函数也可以,比如你希望你写的函数被其他人复用,或者你写的函数特别小。但是为了不用 jQuery,放弃向后兼容?那我觉得还是用 jQuery 得了。所有事情都用 jQuery 实现当然不好,但是任何时候都不用 jQuery也不是什么明智之举。
我不是 jQuery 的狂热粉丝,我也愿意使用一些简化版的 jQuery,只要它们可以让 JS 的 API 更好用一点。You might not need jQuery推荐了bonzo和$dom,以及其他一些 AJAX 库,但是大多数看起来没怎么维护。如果没有足够吸引人的理由,最好不要去替代 jQuery,因为 jQuery 本身没什么大毛病。
有些读者也许会去比较 Vue, React 以及其他前端框架,但是这篇博客的目的是比较 jQuery 与原生的 JavaScript,没有打算去论证整个前端到底应该如何开发。
话说回来,我觉得有些场景下只使用简单的 JavaScript 也挺好的,主要原因是我希望网页可以足够快,可以让尽量多的人正常访问。以我的经验,使用服务端渲染,再加上渐进式增强 JavaScript,是最佳的实现方式,开发起来很简单,访问速度足够快,BUG 也很少。
难道前端框架不好吗?当然不是,没有什么绝对不好的技术,所有技术都有一定的取舍,当然也包括 jQuery。
参考
关于Fundebug
Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有Google、360、金山软件、百姓网等众多品牌企业。欢迎大家免费试用!

版权声明
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2019/06/04/why-i-am-still-using-jquery-in-2019/
2019 年了,为什么我还在用 jQuery?的更多相关文章
- 【原创】我们还需要学jQuery吗?
引言 最近撸Vue的项目,感觉的有点心累.恰巧近日,有读者来信,就是想咨询一下 烟哥,现在还有必要学习jQuery么? 我明白,现在MVVM框架逐渐占据了主要市场,很多老项目也逐渐的从jQuery转向 ...
- 在Visual Studio Code 运行 webpack ./src/main.js --output-filename ./dist/bundle.js --output-path . --mode development 提示 Module no t found:Error:Can't resolve' 'jquery' 是因为vs code还没安装jquery
在Visual Studio Code 运行 webpack ./src/main.js --output-filename ./dist/bundle.js --output-path . --mo ...
- Visual Studio 2019 RC入门
介绍 在本文中,让我们看看如何开始使用Visual Studio 2019 RC.Microsoft现已发布Visual Studio Release Candidate,现在可以下载了.最初,Mic ...
- Visual Studio 2019 RC
Visual Studio 2019 RC入门 介绍 在本文中,让我们看看如何开始使用Visual Studio 2019 RC.Microsoft现已发布Visual Studio Release ...
- 2019基于Hexo快速搭建个人博客,打造一个炫酷博客(1)-奥怪的小栈
本文转载于:奥怪的小栈 这篇文章告诉你如何在2019快速上手搭建一个像我一样的博客:基于HEXO+Github搭建.并完成SEO优化,打造一个炫酷博客. 本站基于HEXO+Github搭建.所以你需要 ...
- Win11曝光 代号“Core OS” 明年推出-IT外包
Win10发布距今已经有两年半的时间了,微软对其"修修补补"也有五次了,而第六次的更新也正在进行中.根据消息爆料,Win 11级别的开发项目"Windows Core O ...
- python学习的准备工作
1.python安装 1.下载: https://www.python.org/downloads/windows/ 2.安装: 安装很简单,就是下一步,只是在最后要勾选上 Add Python 3. ...
- Office2019都有哪些强大功能
前阵子是微软一年一度的Ignite大会.而其中最引人注目.也是与我们一般人最息息相关的消息,当然是Office 2019的正式发布. 尽管Office 2019所更新的功能,对于Office 365的 ...
- AWS 推出长期支持的 OpenJDK 免费分发版本 —— Amazon Corretto
简评:听说 Oracle JDK 要收费了,Oracle 要限制 Java 的商业或生产用途,针对这个问题,AWS 将会推出 Amazon Corretto. Java 是 AWS 用户使用的最流行的 ...
随机推荐
- web视频播放插件:Video For Everybody
相比其它的web视频播放插件(video.js , jwplayer等)来说,Video For Everybody(极力推荐)是一款更好的视频播放插件,无需任何下载,支持html5以及flash播放 ...
- 利用postman进行接口测试并发送带cookie请求的方法
做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...
- ISO7220M芯片调试总结
3.3V或者5V供电 速度可以达到150Mbps 有25年的寿命 调试问题总结: 在调试中发现,芯片焊接的时候很容易损坏,甚至350度焊接,时间在5s的时间都会坏掉.当坏掉的时 ...
- 设置NODE_ENV=test环境变量
之前开发时因为有内网测试环境和外网测试环境,再部署打包时总是切换两个域名,比较麻烦,所以最好能设置一个环境变量,来控制两个域名,于是做了如下配置: "scripts": { &qu ...
- springboot项目--传入参数校验-----SpringBoot开发详解(五)--Controller接收参数以及参数校验----https://blog.csdn.net/qq_31001665/article/details/71075743
https://blog.csdn.net/qq_31001665/article/details/71075743 springboot项目--传入参数校验-----SpringBoot开发详解(五 ...
- HDU 1203 背包问题
题目大意: 根据学校的申请费用,根据已有的钱得到最大的offer率 这里很明显就是一个价值为概率的背包问题 计算两个offer合并的概率 为a + b - a*b #include <cstdi ...
- Xdebug的安装、配置和使用
对于我这么一个渣渣php码农,平时总觉得echo.var_dump.print_r就能满足我的调试需求了,最近公司开始一个新项目,要大量阅读调试旧的源码,echo和var_dump开始不够用了,于是装 ...
- [bzoj1607][Usaco2008 Dec]Patting Heads 轻拍牛头_筛法_数学
Patting Heads 轻拍牛头 bzoj-1607 Usaco-2008 Dec 题目大意:题目链接. 注释:略. 想法:我们发现,位置是没有关系的. 故,我们考虑将权值一样的牛放在一起考虑,c ...
- Bestcoder #92
A =w= B 计数题,枚举A.C,算B.D的个数,注意减去重复的 我当时是f[1][n]->f[2][n]->f[3][n]->f[4][n]递推的 C 题意:长为n的字符串仅由' ...
- BAT经典面试题,深入理解Java内存模型JMM
Java 内存模型 Java 内存模型(JMM)是一种抽象的概念,并不真实存在,它描述了一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段.静态字段和构成数组对象的元素)的访问方式.试图屏 ...