查看原文
其他

jQuery 老矣,尚能饭否?

The following article is from 前端充电宝 Author CUGGZ

近日,jQuery 官方发布了 v4.0 测试版,标志着这个曾经盛极一时的 JavaScript 框架正迎来全新的发展阶段。尽管新框架和库不断涌现,jQuery 依然凭借其深厚的积累与广泛的用户基础,在前端领域占据着一席之地。
jQuery,曾经的前端霸主,如今随着技术的不断发展,它怎样了?本文将分享 jQuery 4.0 的更新亮点,回顾其辉煌的发展历程,并聊聊对 jQuery 的未来的看法。

jQuery 4.0 更新内容

经过精心筹备,jQuery 4.0 beta 版本终于发布了!该版本带来了错误修复、性能提升和重大改进,其中最显著的是舍弃了对 IE<11 的支持,以更好地适应现代 Web 标准。jQuery 团队长期以来一直在寻求重大改进,如今,jQuery 4.0.0 beta 终于实现了这些目标,包括清除冗余代码、淘汰过时 API、移除未公开的内部参数,以及简化过于复杂的“魔术”行为。

下面就来看看 4.0 版本都有哪些更新。

再见 IE<11

随着技术的进步,jQuery 4.0 决定停止支持 IE10 及更早的浏览器。我们计划在未来版本(jQuery 5.0)中进一步减少支持的浏览器范围。此次更新将移除专为旧版 IE 设计的代码,使代码库更加高效。同时,我们也停止了对其他老旧浏览器的支持,如 Edge Legacy、旧版 iOS 和 Firefox,以及 Android 原生浏览器。若你需支持这些浏览器,可以使用 jQuery 3.x。

删除已弃用的 API

这些在多个版本中已被弃用的函数现在终于在 jQuery 的主要版本中迎来了它们的终点。这些函数或因设计为内部使用,或因已有所有支持浏览器的原生替代方案,而被移除。具体包括:

  • jQuery.cssNumber

  • jQuery.cssProps

  • jQuery.isArray

  • jQuery.parseJSON

  • jQuery.nodeName

  • jQuery.isFunction

  • jQuery.isWindow

  • jQuery.camelCase

  • jQuery.type

  • jQuery.now

  • jQuery.isNumeric

  • jQuery.trim

  • jQuery.fx.interval

如果你的代码中有使用这些函数,请务必更新,以使用相应的原生方法或替代函数,确保与最新版本的 jQuery 兼容。

其他:

  1. 移除特定方法:jQuery 4.0 移除了几个专为内部使用设计的数组方法,包括 pushsortsplice。开发者应更新代码,使用标准的数组方法替代。

  2. 事件顺序变更focusinfocusout 事件的处理顺序在 jQuery 4.0 中有所改变,以符合最新的 W3C 规范。这可能会影响依赖旧顺序的插件或代码。新的顺序是:blur -> focusout -> focus -> focusin

  3. jQuery.ajax 新增 FormData 支持:jQuery.ajax 现在可以自动处理二进制数据,包括 FormData,无需额外配置。

JSONP 自动转换已移除

jQuery 4.0 不再自动将 dataType: "json" 和提供的回调函数转换为 JSONP 请求。现在推荐使用 CORS 进行跨域交互,因为它在 jQuery 4.0 支持的所有浏览器中都有效。这有助于避免在不知情的情况下执行来自远程域的代码。

jQuery 源码采用 ES 模块

jQuery 主分支的源码已从 AMD 迁移到 ES 模块。虽然之前 jQuery 源码一直与发布版本一起提供在 npm 和 GitHub 上,但之前不能直接作为模块导入,除非使用 RequireJS。现在使用 Rollup 打包 jQuery,并单独在 ES 模块上运行所有测试。

Trusted Types 和 CSP 支持

jQuery 4.0 现在支持 Trusted Types,允许使用 TrustedHTML 包装的 HTML 作为 jQuery 操作方法的输入,同时遵守 Content Security Policy 的 require-trusted-types-for 指令。

此外,为避免 CSP 错误,jQuery 4.0 已将大多数异步脚本请求从使用 XHR 切换到使用 <script> 标签。只有在特定情况下(如使用 "headers" 选项时)才继续使用 XHR。对于需要支持 IE11 的情况,建议使用主构建版本或添加原生 Promises 的 polyfill。

更精简的构建版本

jQuery 4.0 的精简构建版本经过优化,移除了 Deferreds 和 Callbacks,使其大小进一步缩小(压缩后低于 20k)。虽然 Deferreds 提供了一些原生 Promises 不具备的功能,但在大多数场景下,可以使用原生 Promises 替代。对于需要支持 IE11 的用户,建议使用主构建版本。

jQuery 发展历程

jQuery 是什么?

jQuery是一个快速、简洁的JavaScript框架,jQuery 的发布初衷是简化 JavaScript 编程,并提供跨浏览器的兼容性。在早期的 Web 开发中,不同的浏览器对 JavaScript 的实现存在很大的差异,这使得编写跨浏览器的 JavaScript 代码变得非常困难。jQuery 的目标是通过提供一致的 API,简化 JavaScript 编程,并使其更易于跨浏览器开发。

jQuery 的出现解决了许多早期 Web 开发中的常见问题,例如:

  • 简化DOM操作:在Web开发中,DOM(文档对象模型)操作是非常常见的任务。然而,原生的JavaScript DOM操作代码冗长且复杂,容易出错。jQuery通过封装常用的DOM操作,提供了一种简洁、易用的API,使得开发者能够更加方便地操作DOM。

  • 解决浏览器兼容性问题:由于不同浏览器对JavaScript的支持程度不同,因此在编写JavaScript代码时需要考虑浏览器兼容性问题。jQuery对常用浏览器进行了兼容性处理,开发者无需关心浏览器差异,只需编写标准的jQuery代码即可。

  • 简化事件处理:在Web开发中,事件处理是非常重要的功能。然而,原生的JavaScript事件处理代码也比较复杂,且容易出错。jQuery封装了常用的事件处理函数,使得开发者能够更加方便地处理各种事件。

  • 简化动画设计:在Web开发中,动画设计也是常见的需求。然而,原生的JavaScript动画设计代码复杂且难以实现。jQuery提供了简单易用的动画设计API,使得开发者能够轻松地实现各种动画效果。

  • 提供Ajax支持:Ajax技术是现代Web应用的重要组成部分。然而,原生的JavaScript Ajax代码也比较复杂,且需要处理各种回调和错误。jQuery提供了简单易用的Ajax API,使得开发者能够更加方便地使用Ajax技术。

jQuery 的历史

jQuery 的历史可以追溯到2005年,当时John Resig为了简化JavaScript编程而开始开发一个名为Prototype的“Behaviour”库。然而,他发现这个库过于庞大且复杂,于是决定重新开发一个更加轻量级、易于使用的JavaScript库,这就是jQuery的雏形。

在2006年1月,John Resig在BarCamp NYC上首次发布了jQuery。这个初版已经支持CSS选择符、事件处理和AJAX交互,而且其独特的链式语法和短小清晰的多功能接口也受到了广泛好评。随着版本的迭代,jQuery逐渐增加了对动画效果、插件扩展等方面的支持,使得开发者能够更加方便地使用JavaScript进行Web开发。

以下是 jQuery 的发展历程中的一些关键节点:

  1. 2006年1月,John Resig正式宣布以jQuery的名称发布自己的程序库。这是一个为JavaScript编写的简洁、快速且功能丰富的库。

  2. 2006年8月,jQuery发布了第一个稳定版本,这个版本已经支持CSS选择符、事件处理和AJAX交互。

  3. 2007年7月,jQuery 1.1.3版发布,这个版本的变化主要集中在对jQuery选择符引擎执行速度的显著提升,使得jQuery的性能达到了其他同类JavaScript库如Prototype、Mootools以及Dojo的水平。

  4. 同年9月,jQuery 1.2版发布,这个版本去掉了对XPath选择符的支持,增加了对效果进行更为灵活的定制的能力,并借助新增的命名空间事件,使插件开发变得更容易。同时,jQuery UI项目也开始启动。

  5. 2008年5月,jQuery 1.2.6版发布,这个版本主要是将Brandon Aaron开发的流行的Dimensions插件的功能移植到了核心库中,同时修复了许多BUG,提高了性能。

  6. 2009年1月,jQuery 1.3版发布,这个版本使用了全新的选择符引擎Sizzle,显著提升了在各个浏览器下的查询速度,使程序库的性能有了极大提升。

  7. 2009年9月,微软和诺基亚公司正式宣布支持开源的jQuery库,微软公司还将jQuery作为Visual Studio工具集的一部分,提供包括jQuery的智能提示、代码片段、示例文档编制等内容在内的功能。

  8. 2012年1月31日,jQuery 1.5正式版发布,这个版本包括了许多重大改进,如重写了Ajax模块,新增了延缓对象(Deferred Objects),提供了jQuery替身——jQuery.sub(),增强了遍历相邻节点的性能,并对jQuery开发团队构建系统进行了改进。

  9. 2013年4月18日,jQuery 2.0正式版发布,这个版本不再支持IE6/7/8,文件大小与1.9.1相比小了12%,可以构建一个更小、更轻量的版本。同时,jQuery 2.0 API完全兼容jQuery 1.9 API,它融合了CSS,HTML,JavaScript,AJAX等多项技术。

  10. 2014年:jQuery团队推出了3.x版本。这个版本分为两个分支:jQuery 3.0和jQuery 3.0 compat。其中,jQuery 3.x是2.x的后续版本,主要关注性能和内部架构的优化。而jQuery 3.0 compat版本则是为了兼容1.x版本而设计的,允许开发者在升级到3.x版本时保持代码的稳定性。同时,随着现代浏览器对HTML5和CSS3的支持越来越完善,jQuery也开始更加注重与这些新标准的兼容性和优化。

  11. 2018年:jQuery发布了3.3版本,这个版本带来了一些小型的改进和性能优化,以及对一些现代浏览器特性的支持。此时,随着前端技术的快速发展,jQuery虽然仍然是一个受欢迎的库,但也面临着来自其他新兴框架(如React、Vue等)的竞争。

  12. 2020年及以后:jQuery团队继续维护着库的稳定性和兼容性,不断修复BUG并优化性能。

jQuery 未来展望

jQuery 的现状可以说是处于一个相对成熟且稳定的状态,但同时也面临着一些挑战和变化。

首先,从积极的角度来看,jQuery 仍然是一个非常受欢迎和广泛使用的 JavaScript 库,其生态系统中拥有超百万个插件,根据 BuiltWith 的数据,排名前 100 万的网站中有 78% 仍以某种方式使用 jQuery。它的简单易用、强大的 DOM 操作、事件处理、动画和 Ajax 功能,以及良好的浏览器兼容性,使得它在许多项目中仍然是首选的 JavaScript 库。特别是在一些小型公司或者项目中,由于开发周期短、人员技能限制等原因,jQuery 仍然是一个非常重要的工具。

目前,jQuery 的 npm 下载量大概是 Vue 的两倍:

然而,随着前端技术的不断发展和变化,jQuery 也面临着一些挑战。一方面,随着现代浏览器对原生 JavaScript 的支持越来越好,许多原本需要依赖 jQuery 实现的功能现在已经可以通过原生 JavaScript 来实现,而且性能可能更好。另一方面,随着前端框架和库的不断涌现,如 React、Vue、Angular 等,这些框架提供了更加高效、灵活和现代化的开发方式,因此在一些大型或者复杂的项目中,jQuery 可能不再是首选。

此外,值得注意的是,虽然 jQuery 本身仍然非常活跃,但是其社区已经不如过去那么繁荣了。这在一定程度上反映了前端技术的整体趋势:随着更加现代化、高效和灵活的前端框架和库的出现,传统的 JavaScript 库的地位可能会逐渐下降。

最后,我们来看看网友对 jQuery 的看法。

  • 写起来爽,维护起来困难。

江山代有框架出,各领风骚数十年,科技产品不论是硬件还是软件都会淘汰jQuery用起来一时写一时爽,维护起来就难了,挑几个点思考下:

  1. 没有组件的概念,代码难以复用。

  2. 没有关注点分离,html与JS交织在一起,可读性差

  3. 每次编写都遵循繁琐的编写流程:Init,ajax,拼接html,bindEvent。

简单讲,现在框架解决了上述问题。

  • 简单易用

作为个人写代码,前端装node,webpack太麻烦了,每次发布都还要编译,太烦了。jquery多简单

  • 功不可没

2023年8月26日,距离上一版本时隔一年零五个月之久,jQuery更新了 3.6.1 维护版本。


jQuery强调的理念是写得少,做得多(write less, do more)。它简化了操作DOM的方法,让早期的程序员们能更方便的实现动画、修改CSS等各种操作,说它是JavaScript史上使用最广泛的一个库也不为过。jQuery独特的选择器、链式操作、事件处理机制和封装完善的Ajax都是其他JavaScript库望尘莫及的。


在这个前端快速更新迭代的时代,各大框架大行其道,关注jQuery的人越来越少,甚至不愿意去面对它。但它曾经辉煌过,它的功绩功不可没,不可磨灭。

曾经辉煌过的 JS 框架如今渐渐日薄西山,在将来我们是会将见证其终局,还是看着它一步步改进之后又重新回归到大众视野?

  • 还在更新,还能用

2023年了,jquery还在更新,所以还能用。作为一个工具库,用它其实不丢人。所有的工具都会过时,所有的技术都会被替代。站在这个时代里,不管你随波逐流,还是坚守阵地,都离不开时代的局限性。任何的嘲讽都显得毫无意义。你我他都可能成为别人嘲讽的过去。

  • 不再积极维护,但仍是一个很好的选择

下图是 jQuery 在 Github 上的 commits 活跃度统计图:

可以看到 2014 年是一个分水岭,React 也是那一年前后诞生的,之后逐渐提交数越来越少,2016 年之后更加明显,另外一方面原因也是因为 jQuery 库本身比较轻量级,核心稳定后,后期改动就不大了。


原始作者 jeresig 应该很早就没在 jQuery 项目继续参与贡献了,目前估计是后面三位在继续维护 jQuery 项目。


作为一个开发时间跨度长达 18 年,在 React、Vue、Angular 出现之前基本上统治前端页面开发的 JS 库,应该说整个项目核心应该非常稳定了,Bug 不多,是一个非常优秀的库。


如果项目不是非常复杂,想要怎么快怎么来的话,jQuery 就非常合适了,基本上在 html 里面引用一个 CDN 上的资源,然后就能用了,而且 jQuery 本身也挺好用的。


还有一些地方就是不太适合 React 这类响应式框架的场景,比如富文本编辑器,可能就操作原生的 DOM 元素就好了,我记得 CKEditor 里面就有用到 jQuery。


个人认为在之后很长一段时间,在一些场景里面,jQuery 应该还是一个很好的选择。

  • 使用jQuery,享受纯正的js开发

jQuery一直在更新,4.0 即将发布。微小型项目首选,vue、react虽然称自己是轻量级框架,但是在jquery面前就是一个弟弟,什么数据双向绑定,动态路由之类的,不就是框架里完成了这部分的开发,自己也可以封装出这个功能。 


使用jQuery,享受纯正的js开发。

  • 存在即合理

只能说jquery曾经我是用得最多的,但现在却已经转向各种框架

jquery有着曾经的辉煌,不管技术怎么发展,它作为之前的前端开发贡献了不可磨灭的成就。


以前写jquery,各种操作dom,各种爽,比原生的js好用太多,对于各种api也是手到擒来。写点击菜单列表显示选中效果,只要一行代码就搞掂,这是多么舒服的写法。


我不知道jquery会不会消失,但存在即合理,虽然现在各种框架流行,但对于seo来说,这是框架没有办法做到的。而jquery操作dom的直接手法,对于seo来说简直是太好了。


爬虫看到jquery,心里那个高兴啊,随便走一下,各种数据就收集了,真是爽歪歪啊~


希望jquery一直前行~~~

  • 写油猴脚本很有用

写油猴脚本,jquery非常地好用。

  • 很多老项目在用

新项目估计很少有用的了,老项目还很多,也还有很多人使用,逐渐会被淘汰,不管vue还是react,操作数据比操作dom方便也有趣很多。

注:以上看法来源于知乎。

最后,回归到主题,jQuery 老矣,尚能饭否?

对于jQuery来说,尽管近年来新兴的前端框架和库不断涌现,但jQuery仍然保持着它的魅力和实用性。它拥有大量成熟的插件和社区支持,这使得它成为许多项目中的首选选择,尤其是在需要快速原型开发、简单DOM操作或维护老旧项目时。

然而,随着前端技术的不断发展和新框架的涌现,jQuery在某些方面可能不是最优选择。对于需要高性能、复杂数据交互或组件化开发的项目,一些现代的前端框架(如React、Vue、Angular等)可能更适合。这些框架提供了更丰富的功能和更好的性能,能够满足更复杂的应用程序的需求。

然而,随着前端技术的不断发展和新框架的涌现,jQuery在某些方面可能不是最优选择。对于需要高性能、复杂数据交互或组件化开发的项目,一些现代的前端框架(如React、Vue、Angular等)可能更适合。这些框架提供了更丰富的功能和更好的性能,能够满足更复杂的应用的需求。

对于 JQuery 你怎么看?欢迎在评论区留言讨论!

👇🏻 点击下方阅读原文,获取鱼皮往期编程干货。

往期推荐

我们两岁啦!

刚入职大厂,老板让我转语言。。

老子写个代码而已,凭什么还要我写文档?

告别 if else,这款流程引擎真香

拒绝拖延!我是怎么提高行动力的?

美团二面:布隆过滤器有什么用?

继续滑动看下一个

jQuery 老矣,尚能饭否?

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存