摘要:
jQuery该退役了。
-
原文:为什么越来越少的人用jQuery
-
作者:Lemonade
Fundebug
经授权转载,版权归原作者所有。
最早期的开发,大多都使用jQuery,它给我们带来了很多的便利:快速选取元素,方便操作DOM元素的API,各个浏览器之间完美的兼容性,链式操作,动画、ajax等等都是jQuery为前端开发人员来带的好处。为什么现在越来越少人用了呢?我来分以下几点,阐述我的想法:
一、JS更新带来的冲击
1. 快速选取DOM节点
对于大部分使用jQuery的开发工程师来说,能够快速选取DOM节点,这个无疑是一个重要的原因,但是就目前情况来说,这个优势显然已经荡然无存了,为什么呢?跟大家说两个API,这两个API已经非常多的人在用了,就是document.querySelector和document.querySelectorAll方法。这两个方法可以通过传入css选择器形式的字符串,就可以匹配到预期的DOM节点。以下是目前两个API的兼容情况:
从图中可以看到,这两个API已经很好的兼容各个浏览器。
Vue中也是使用此API进行元素获取的:
所以说jQuery快速选择DOM节点的优势已经不存在了。
2. 方便操作DOM元素的API
可以方便操作DOM元素的API,比如addClass 、removeClass 、toggleClass。现在原生JS也得到了支持,这个API叫做classList。
虽然说IE兼容的不太完美,但是最基本该实现也都实现了。
3. 动画
现在CSS3动画技术已经非常的成熟,已经完全可以取代jQuery做的动画,而且还能比jQuery的animate方法实现更复杂的动画,兼容性好,性能消耗小,何乐而不为呢?举个例子吧,比方说如果实现背景颜色过度,CSS3可以完美的实现,但是jQuery就不行。并且现在已经出现了很多优秀的CSS3动画库,大名鼎鼎的Animate.css库大家肯定都有耳闻吧。
4. Ajax操作
jQuery的ajax操作,为我们省去了兼容浏览器方面的问题,并且也提供了简明的API去调用get和post,让开发者从繁琐的兼容性与使用原生API上解脱出来。但是现在,这个优势也已经非常微小了。不管是原生JS的Fetch API还是axios。都为我们提供了强大的ajax使用能力,并且axios还有拦截器这个优势。这时相较而言,jQuery的ajax确实已经无法相比了。
当然Fetch在IE上来说,肯定是没法用的
但是已经有了Fetch的Polyfill方案:github/fetch
这样只需要引用这一个小小的JS,就可以使用方便的ajax了。相较于jQuery,那是小巧很多的。
二、性能问题
在原来的开发中,工程师们不会太纠结于性能问题。但是现在不同了,为了提高用户体现,首要的就是解决浏览器绘制所带了的性能问题。最经典的莫过重绘和回流这两个概念。
重绘:
就是页面重新进行绘制,比方说,修改一个元素的背景颜色。
回流:
一般来说,浏览器进入页面的时候就已经进行了一次回流,回流其实指的就是页面重新进行排版布局。
既然我们想提高性能,那么就可以先从这两概念入手,肯定是以最小的代价更新页面是提高性能最好的手段。但可惜的是,jQuery并没有做到。为什么这么说,请看以下分析:
当我们拿到一组新闻数据要渲染到ul标签里时,通常我们会先将新闻数据逐条进行字符串拼接,紧接着使用$符选择ul元素,并修改ul的innerHTML的值为拼接好的字符串(使用html API),此时完成了第一次渲染。这次页面进行了重绘(这时必然的),首先不分析第一次的性能好或坏,用下一个说明将更加有力。
比如说我们这时多了一个
换一换
按钮。在传统开发模式中,这时的换一换按钮肯定执行的还是上面的代码,获取元素,修改元素的innerHTML,但是现在问题出现了,就是我们有必要将所有元素重新删除,再重新添加一遍吗?答案肯定是不需要(下图所示,创建一个元素的代价有多大)。