为何愈来愈少的人用jQuery

摘要:JQuery该退役了。css

Fundebug经受权转载,版权归原做者全部。html

最先期的开发,大多都使用jQuery,它给咱们带来了不少的便利:快速选取元素,方便操做DOM元素的API,各个浏览器之间完美的兼容性,链式操做,动画、ajax等等都是jQuery为前端开发人员来带的好处。为何如今愈来愈少人用了呢?我来分如下几点,阐述个人想法:前端

1、JS更新带来的冲击

1. 快速选取DOM节点

对于大部分使用jQuery的开发工程师来讲,可以快速选取DOM节点,这个无疑是一个重要的缘由,可是就目前状况来讲,这个优点显然已经荡然无存了,为何呢?跟你们说两个API,这两个API已经很是多的人在用了,就是document.querySelector和document.querySelectorAll方法。这两个方法能够经过传入css选择器形式的字符串,就能够匹配到预期的DOM节点。如下是目前两个API的兼容状况:vue

从图中能够看到,这两个API已经很好的兼容各个浏览器。react

Vue中也是使用此API进行元素获取的:jquery

因此说jQuery快速选择DOM节点的优点已经不存在了。ios

2. 方便操做DOM元素的API

能够方便操做DOM元素的API,好比addClass 、removeClass 、toggleClass。如今原生JS也获得了支持,这个API叫作classList。git

虽说IE兼容的不太完美,可是最基本该实现也都实现了。github

3. 动画

如今CSS3动画技术已经很是的成熟,已经彻底能够取代jQuery作的动画,并且还能比jQuery的animate方法实现更复杂的动画,兼容性好,性能消耗小,何乐而不为呢?举个例子吧,比方说若是实现背景颜色过分,CSS3能够完美的实现,可是jQuery就不行。而且如今已经出现了不少优秀的CSS3动画库,大名鼎鼎的Animate.css库你们确定都有耳闻吧。ajax

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,那是小巧不少的。

2、性能问题

在原来的开发中,工程师们不会太纠结于性能问题。可是如今不一样了,为了提升用户体现,首要的就是解决浏览器绘制所带了的性能问题。最经典的莫太重绘和回流这两个概念。

重绘:就是页面从新进行绘制,比方说,修改一个元素的背景颜色。

回流:通常来讲,浏览器进入页面的时候就已经进行了一次回流,回流其实指的就是页面从新进行排版布局。

既然咱们想提升性能,那么就能够先从这两概念入手,确定是以最小的代价更新页面是提升性能最好的手段。但惋惜的是,jQuery并无作到。为何这么说,请看如下分析:

当咱们拿到一组新闻数据要渲染到ul标签里时,一般咱们会先将新闻数据逐条进行字符串拼接,紧接着使用$符选择ul元素,并修改ul的innerHTML的值为拼接好的字符串(使用html API),此时完成了第一次渲染。此次页面进行了重绘(这时必然的),首先不分析第一次的性能好或坏,用下一个说明将更加有力。

好比说咱们这时多了一个换一换按钮。在传统开发模式中,这时的换一换按钮确定执行的仍是上面的代码,获取元素,修改元素的innerHTML,可是如今问题出现了,就是咱们有必要将全部元素从新删除,再从新添加一遍吗?答案确定是不须要(下图所示,建立一个元素的代价有多大)。

由于这时咱们只须要将每个li里的文字和a标签里的连接修改便可,那显然是没有必要像上面那样从新再添加一遍li的。由于一个DOM元素,可能包含上百条属性,这对性能开销是很大的。

那么如今出现的新概念 Virtual DOM(虚拟DOM),就能够解决这个问题。其实Virtual DOM就是对真实DOM节点的描述,经过改变Virtual DOM来以最小变更来改变真实DOM(Virtual DOM不必定真的比jQuery性能更好)。

尤雨溪:网上都说操做真实 DOM 慢,但测试结果却比 React 更快,为何?

3、现代框架对jQuery的影响

如今国内比较火的React 、Vue 、Angular框架,都是属于MV*框架的范畴,其设计特色,主要是以数据为核心。能够说操做DOM的事儿,就留给框架去作了。这比传统jQuery开发效率高,代码可维护性高,可扩展性强、性能好。

打个比方:

我让jQuery去买瓶酱油,给了他100块钱,这时咱们须要告诉他去小卖铺的路怎么走、怎么跟老板说买啥酱油,买多少钱的酱油,找多少零钱,还得告诉他怎么回来(命令式)

这时我让Vue去买酱油去了,这时我只须要给他钱,而且告诉他目的地在哪儿,买什么酱油便可,不须要手把手教他(函数式)

这就是传统开发和现代框架开发的不一样。

使用现代框架开发,可使用Webpack(固然使用jQuery也可使用Webpack),可使用人家提供的现成的脚手架,比方说create-react-app,vue-cli。极大提升了开发的效率,而且可使用最新的ES六、ES7语法进行开发,在编码体验上,就提升了一个档次。

如今jQuery已经完美的退出了历史的舞台,他已经完成了他所要完成的任务。

关于Fudebug

关于Fundebug

Fundebug专一于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了9亿+错误事件,获得了Google、360、金山软件、百姓网等众多知名用户的承认。欢迎免费试用!

相关文章
相关标签/搜索