前言
前几天知乎上有一个问题:jQuery真的过时了吗?我的答案是:jQuery确实过时了!感觉这个话题挺有趣,那咱们展开了聊聊。详细地说一下jQuery为什么过时了。
一、jQuery解决了哪些痛点
讨论一个库或者框架是否过时,应该先看看它解决了哪些问题,这些问题现在是否有更好的解决方案。
jQuery解决了哪些问题呢?
浏览器兼容问题
IE678横行的年代,浏览器兼容问题是前端小伙伴们必须掌握的技能,IE6有哪些bug,这得倒背如流。IE不识别哪些标准的JavaScript方法和对象,这也得记住,写个ajax,别人都用XMLHttpRequest,到IE就得用ActiveXObject。苦逼的前端程序员不能专心研究技术,只能天天为浏览器厂商擦屁股。直到jQuery的出现,大家解脱了,DOM操作也好,事件绑定也好,ajax也好,jQuery为我们封装了兼容各个浏览器的方法,感觉整个世界都和平了。
选择器
没有jQuery,我们要用getElementById、getElementsByTagName这些方法获取DOM对象。为列表所有元素绑定事件,要么事件委托,要么遍历所有元素。为了搞定操蛋的DOM接口,我们掌握了各种奇淫技巧,其实毛用没有。有了jQuery,我们可以用css选择器获取元素,绑定事件也不在需要遍历元素列表了,整个人都清爽了。
动画效果
我清晰地记得第一次用计时器写动画,如何让一个元素动起来,再如何让它停止运动。调试完,无bug,这就用了一堆代码了,更不用说做一个完整的页面效果,想想就让人崩溃。在看看jQuery为我们提供的动画效果,简直不敢想象没有jQuery,我们如何在IE678里面实现我们想要的效果。
总结
jQuery解决的痛点还远不止这些:它的DOM操作,样式操作,属性操作,事件绑定,还有遍历,表单序列化,ajax封装,这些功能给前端开发带入了一个崭新的世界。一直到今天,jQuery仍然是被前端开发者使用最多的库,没有之一!
二、替代jQuery的解决方案
jQuery给前端带来的影响是空前的,但是随着前端的发展,jQuery也进入了一个过时的状态,它为我们解决的痛点都已经有了替代方案。
浏览器兼容
浏览器的兼容问题越来越不是问题,IE6可以说已经被淘汰了(目前只有大型国企、事业单位、机关部门还有医院中的XP系统还保留着IE6,但是也开始逐步淘汰中)。天猫去年已经宣布不再支持IE8。虽然浏览器兼容问题仍然存在,但是已经不是当年那个坑翻天的时代了。
选择器
CSS3新增了大量选择器,操作样式,想怎么找就怎么找,不必麻烦jQuery。
原生的JavaScript也新增了querySelector和querySelectorAll方法,可以直接通过css选择器获取元素。
动画效果
css3提供了丰富的过渡和动画效果,让我们不再依赖jQuery。
ajax
fetch和axios这些第三方模块已经将ajax封装得相当出色了,我们再也不用为了一个$.ajax就引入jQuery。
DOM操作和事件绑定
抛开动画的问题,剩下主要就是数据的增删改,这种操作用jQuery,不管从性能的角度,还是易于开发和维护的角度来看,mvvm框架都要超jQuery很多。
组件化和模块化
组件化和模块化的开发是现在前端开发的主流,优点简单的说就是易于开发、易于维护、易于团队分工。
jQuery是可以组件化开发的,但是用jQuery写组件,就用两个字形容:蛋疼,谁用谁知道。
模块化不管是用ES2015也好(import,export),用webpack也好(require,module.exports),再不行,咱们复古有点用require.js或者sea.js,这显然和jQuery都没什么关系
综上所述
jQuery所有的优点都有更优秀的解决方案,可以肯定的说,jQuery已经过时了!
(如果贵公司要求兼容IE678,那就另当别论了。)
三、jQuery并没有被淘汰
jQuery虽然已经过时了,但是并没有被淘汰,而且近几年也不会。
现在市面上的大部分网站和应用还是基于jQuery,在此后的几年,他们仍然需要用jQuery维护。
很多公司没有专职的前端开发,他们的前端工作由后台负责,这些人更喜欢用jQuery加后台模板的工作模式。
部分两三年以上工作经验的前端开发,他们安于现状,排斥css3新特性,也没耐心学习mvvm框架,jQuery仍是他们的主要工具。
IE678并没有消失,所以jQuery仍有用武之地。
jQuery易于上手,仍然很适合做一些简单的网站。
综上所述,jQuery并没有被淘汰,仍然是新人必须技能之一。
四、总结
jQuery虽然过时了,但是jQuery仍然是前端开发的必备技能,对于一个前端新人,这个坑一定得踩。
五、尾声
如果您觉得有收获,请不要吝惜一个小小的【赞】,如果喜欢类似的文章,可以关注微信公众号:【晓舟报告】,第一时间获取文章。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。