jQuery会过时吗?

来源:互联网 发布:电脑同时安装软件 编辑:程序博客网 时间:2024/06/10 09:32

先答题:如果说过时指被需要得少了,那肯定是在过时。

但如果同意规范的一部分来自它的思想,那就「孰谓公死,凛凛犹生」。

《致敬jQuery》

Java语言让我敬重的框架,阙惟Spring;

JavaScript语言让我敬重的类库,只有jQuery。Spring的善利万物,jQuery的为道日损,都闪耀着道家清心自退的智慧光芒。

取天下常以无事,于是天下莫能与之争。

有人疑惑:jQuery做的事这么少,为什么会这么火?

我说:jQuery的火,既因为它做了一点事,更因为它没做许多事。

做事是本能,不做需要大智慧,把握好做和不做的分寸,是为进退有据。

它做的,都是最核心最要命的点,DOM操作和Ajax,浏览器兼容。

在绝大多数情况下这就够了,多了是累赘,占流量,拖速度,还累脑子。

很多好框架都过分好心了,把能想到的功能都封一遍,但大部分程序员使用它们的时候只用最核心的那个点,引入的其余部分是白占空间。

JQuery就不,它只编写20%的代码,解决你80%的问题。至于剩下那20%各个业务场景下都不同的功能,它既无力管,也不想管,相信你能解决。

jQuery省事程序员也轻松,于是大家都高兴,jQuery保住了专注,程序员保住了自由。这就是技术上所谓的低侵入,这就是道家所谓的无为。

功成事遂,百姓皆谓我自然。所以jQuery在渐渐退出历史舞台,因为它已然成了规范的一部分。

你不再需要引入jQuery了,因为它已经在浏览器中。

什么叫功成身退,天之道也?什么叫夫唯弗居,是以不去?转头望望,那边厢,Spring也正在被规范吸容。

《企业应用架构模式》不再有人阅读,因为其思想早已成为程序员的本能。我思考做事,一举一动全幻化着你的身影。你来过吗?走过吗?我只知道,我好像进步了。




略做点补充:
Zepto也是过时货了。还有Underscore/Lodash等,也是过时了。


但是过时不代表你就一定不可以再用,或者要从现有项目中清除抛弃掉。项目维护和管理本身是另一回事情,并不是完全由技术因素决定的。


下面稍微讲下为什么已经过时。说这个你得知道jQuery提供的核心价值是什么。

我总结有几点:

1. 发扬光大了$和CSS选择器的天才idea(尽管都不是发明者)
2. 处理浏览器的兼容性问题和各种bug
3. 链式调用为核心的DSL(此为jQuery独创)
4. 基于jQuery的生态(大量插件,各种工具如IDE也对其有良好支持)


看一下前两点,

1. 新的DOM标准(借鉴jQuery)加入了许多新的方法,覆盖了绝大部分use cases;
2. 目前主流浏览器的兼容性已经大幅提高,且因为都是Evergreen browsers了,所以以后也不太会出现严重的兼容性问题了;此外新标准比以往要更详尽清晰,出现不一致和bug的机率也小了;

实际上这前两点也不是一蹴而就的,而是一直在改进。比如原生querySelector API普及之后,才出现了Zepto。只不过这两年发展加速,以至于Zepto还没取代jQuery,就要一起过时了。


当然,现在仍然有兼容性问题,比如老浏览器不支持那些新的DOM方法,还有bug问题始终会有的。

另外一个我认为非常广阔的领域是dom。是的,始终是。

尽管我之前说过了,大框架没有机会。但是注意到一点,jQuery等仍然是建立在前ES5前HTML5时代的。因此那些库其实都干了大量重复的事情。真正有益的是把这些事情做一次,做好它,怎么做好?不是发明各种自己的api,而是大家努力按照html5的规范,去尽量实现一套一致的符合html5语义的底层dom api。

……

以html5规范和语义为准。时刻记得避免夹带私货。此库的最高境界是只作为给浏览器打patch用,也就是一个patch框架加patch实现。

2011年时polyfill这个词还没怎么流行,但是你们可以看到我讲的就是polyfill。不同的是,当时可能还比较前卫的理念,4年后的今天,几乎所有新API都有polyfill/shim实现,所以不再仅仅是理念,而已经有大量非常成熟的实践了。


但直到去年,我一直没说可以抛弃jQuery,那就是因为第三点(基于链式调用的DSL)。即使新的query接口已经直接返回Element数组,因此可链式调用forEach/map之类的方法,但总体上,标准DOM API体系仍然无法像jQuery一样提供一致且(插件)可扩展的链式调用DSL。

然而ES6+的发展终于解决了这个问题,那就是bind operator的出现。且拜JS这一世界上最好的编程语言的强大生态所赐,这个还是草案的语言特性已经可以在生产环境里使用了!

BTW,这一语言特性也同样宣告了 Underscore/Lodash 的终结。


至于第四点,原本其实就有利有弊,比方插件体系就一直被诟病。现在直接换成了ES6 module,且jQuery的生态不再独自孤立,而是可以融入更大的JS和Web的生态,只会更好。


综上,终于可以断言 jQuery/Zepto/Underscore/Lodash 的时代已经结束了。

浏览器对标准的支持程度提高了,无论是原生 XMLHttpRequest, querySelector/querySelectorAll, CSS 动画,还是 ECMAScript 5 的 Array 方法等均受到广泛支持, jQuery 作为弥补不同浏览器差异,简化选择器语法的 shim 的作用已经过时了; ECMAScript 6 的原生 Promise 也正在得到越来越广泛的支持,而且其他的 Promise shims 有着接近原生库的 API set, 所以 jQuery 作为 Promise shim 的功能也过时了; 
只要仍然存在浏览器兼容性问题, jQuery 就仍然存在用武之地,但是浏览器之间的兼容性问题已经逐步的减少了。但是它作为 DOM 操作,事件处理等的语法糖的功能个人觉得目前还没过时,仍然适合设计者或者开发者在原型阶段快速开发的功能