在上周(2022-08-26) jQuery 刚更新了一个 3.6.1 维护版本,距离上一个版本发布时间已过去一年零五个月之久,其维护者表示接下来主要考虑修复聚焦与失焦(focus
& blur
)的问题以及一些难以捉摸的边缘情况,可能是历史原因,jQuery 中与焦点有关的地方都很难改变,团队从未完全正确地修复,所以他们暂时保留这些内容,并将在未来解决,特别是因为这些更改最终可能需要发布一个新的主要版本。
所谓维护版本是指在不更改任何核心组件或添加新功能的情况下纠正安全漏洞或小错误的软件版本。它们通常以十分之一或百分之一来编号,以区别于主要版本,一般来说,软件工程师会尽可能快地完成这个过程,并且不会牺牲编码质量或可靠性。
以下是 jQuery 3.6.1 的一些改进:
基础设施改进
在这个版本中团队做了很多工作来更新项目的一些测试和构建基础设施,包括将 CI 从 Travis CI 迁移到 GitHub Actions,在 Node 16 而不是 Node 15 上进行测试,通过 https 加载他们的测试监听器,以及添加更多自定义构建的准确测试。
不失去焦点
尽管困难,此版本中仍有一个与焦点相关的修复。
即使在移除了 jQuery 焦点处理程序之后,我们对焦点的特殊事件处理仍然保持连接,这破坏了任何后续的手动焦点触发器。例如当:
$elem.on("focus", function() {}).off("focus").trigger("focus");
focus
不会触发。
在 addClass(array) 中跳过错误
在不增加任何大小的情况下,添加了对跳过传递给 addClass
or的数组中的任何错误值的支持removeClass
。
这使得代码如下:
elem.addClass( [ "a", "", "b" ] ); // 添加`a`&`b`类。
与自定义 CSS 属性值的规范保持一致
现在为自定义 CSS 属性值 trimmed,以前类似的东西--prop: value ;
会保留值中的前导和尾随空格,返回“value
”。
附加带有 HTML 注释的脚本
团队在正则表达式中发现了一个问题,即在附加脚本时从脚本中去除 HTML 注释,最终在某些边缘情况下删除了部分可执行脚本。幸运的是更多地依赖浏览器可以成为解决问题的方法,但团队仍然需要在 3.x 分支中为 IE 去除 CDATA 部分。这将在 4.0 中删除。
jQuery.trim 的性能提升
虽然jQuery.trim
已在主分支上删除以支持原生的String#trim
(准备下一个主要版本上线),但对于分支支持的某些浏览器(例如 Android 4.0)在 3.x 分支上仍然需要它。由于其正则表达式的结构,某些极端情况非常慢。目前这种情况已经发生了变化,并且速度提升非常显着。
项目瘦身
有时你可能不需要 ajax,或者你更喜欢自主选择请求库,而将 jQuery 用于 CSS
和类操作组合、Web 动画应用当中。所以除了包含 ajax 和效果模块的常规 jQuery 版本外,团队还发布了一个不包括这些模块的“slim”版本。
如今,jQuery 的大小很少成为负载性能问题,精简版本比常规版本小约 6k (gzip压缩后) 。这些文件也可以在 npm 包和 CDN 上找到:
https://code.jquery.com/jquery-3.6.1.slim.js
https://code.jquery.com/jquery-3.6.1.slim.min.js
继续使用JQ
可以从 jQuery CDN 获取文件,或直接链接到它们:
https://code.jquery.com/jquery-3.6.1.js
https://code.jquery.com/jquery-3.6.1.min.js
还可以从 npm 获取此版本:
npm install jquery@3.6.1
写在最后
在单页面应用大行其道,各种新鲜框架层出不穷的时代,或许已经很少有人会再关注 jQuery,甚至唯恐避之不及,但它曾经的功绩仍不可磨灭,jQuery 致力于消除浏览器差异,简化了操作 DOM 的方法,让早期的开发者们能轻松实现动画、修改 CSS
等各种操作,说它是 JavaScript 史上使用最广泛的一个库也不为过。
曾经辉煌过的 JS 框架如今渐渐日薄西山,在将来我们是会将见证其终局,还是看着它一步步改进之后又重新回归到大众视野?
最后我想用去年 jQuery 3.6.0 发布时底下寥寥数个评论中的一句话来作为结尾:
非常感谢您为维护和改进 jQuery 所做的所有辛勤工作,因为我们中的许多人仍然依赖 jQuery 来处理大多数生产中运行的项目。