jQuery 3.0 Release Candidate…发布!

发布于 作者

欢迎来到 jQuery 3.0 的 Release Candidate!这是我们预计发布为 jQuery 3.0 最终版本的代码(除非发现重大错误或回归)。发布后,jQuery 3.0 将成为 jQuery 的唯一版本。1.12 和 2.2 分支将继续接收关键支持补丁一段时间,但不会获得任何新功能或重大修订。请注意,jQuery 3.0 不支持 IE6-8。如果您需要 IE6-8 支持,可以继续使用最新的 1.12 版本。

尽管版本号为 3.0,我们预计这些发布在升级现有代码时不会带来太多麻烦。是的,有一些“破坏性更改”证明了主要版本号的提升,但我们希望这些破坏不会影响太多人。

为了协助升级,我们有一个全新的 3.0 升级指南。并且 jQuery Migrate 3.0-rc 插件将帮助您识别代码中的兼容性问题。您对这些更改的反馈将对我们非常有帮助,请在您的现有代码和插件上尝试一下!

您可以从 jQuery CDN 获取文件,或直接链接到它们

https://code.jqueryjs.cn/jquery-3.0.0-rc1.js

https://code.jqueryjs.cn/jquery-3.0.0-rc1.min.js

您也可以从 npm 获取 Release Candidate

npm install jquery@3.0.0-rc1

此外,我们还发布了 jQuery Migrate 3.0 的 Release Candidate。我们强烈建议使用它来解决 jQuery 3.0 中破坏性更改的任何问题。您可以在这里获取这些文件

https://code.jqueryjs.cn/jquery-migrate-3.0.0-rc1.js

https://code.jqueryjs.cn/jquery-migrate-3.0.0-rc1.min.js

npm install jquery-migrate@3.0.0-rc1

有关如何使用 jQuery Migrate 将您的 jQuery 1.x 和 2.x 页面升级到 jQuery 3.0 的更多信息,请参阅 昨天的 jQuery Migrate 博客文章

 

主要变更

以下只是这些发布中主要新功能、改进和错误修复的亮点,您可以在 3.0 升级指南中了解更多详细信息。完整的修复问题列表可在我们的 GitHub 错误跟踪器上找到。

jQuery.Deferred 现在与 Promises/A+ 兼容

jQuery.Deferred 对象已更新,与 Promises/A+ 和 ES2015 Promises 兼容,并通过 Promises/A+ Compliance Test Suite 进行了验证。这意味着我们需要对 .then() 方法进行一些重大更改

  • .then() 回调中抛出的异常现在将成为拒绝值。 以前,异常会一直冒泡,中止回调执行并不可逆地锁定父级和子级 Deferred 对象。
  • .then() 创建的 Deferred 的解析状态现在由其回调控制——异常成为拒绝值,而非 thenable 的返回值成为完成值。 以前,拒绝处理程序中的返回值会成为拒绝值。
  • 回调始终异步调用。 以前,它们会在绑定或解析时立即调用,以两者中较晚者为准。

考虑以下示例,其中父级 Deferred 被拒绝,并且子级回调会生成一个异常


var parent = jQuery.Deferred();
var child = parent.then( null, function() {
  return "bar";
});
var callback = function( state ) {
  return function( value ) {
    console.log( state, value );
    throw new Error( "baz" );
  };
};
var grandchildren = [
  child.then( callback( "fulfilled" ), callback( "rejected" ) ),
  child.then( callback( "fulfilled" ), callback( "rejected" ) )
];
parent.reject( "foo" );
console.log( "parent resolved" );

从 jQuery 3.0 开始,这将首先记录“parent resolved”,然后调用任何回调,每个子级回调将记录“fulfilled bar”,并且孙级对象将使用 Error “baz” 被拒绝。 在以前的版本中,它会记录“rejected bar”(子级 Deferred 被拒绝而不是完成)一次,然后立即以未捕获的 Error “baz” 终止(未记录“parent resolved”,并且孙级对象未解析)。

虽然捕获异常对于浏览器内调试具有优势,但使用拒绝回调来处理它们更具声明性(即明确性)。 请记住,这意味着您有责任始终为使用 promise 时添加至少一个拒绝回调。 否则,任何错误都将被忽略。

可以通过使用现在已弃用的 .pipe() 方法(其具有相同的签名)来恢复旧行为。

我们还构建了一个插件来帮助调试与 Promises/A+ 兼容的 Deferred。 如果您在控制台上看不到足够的信息来确定错误的来源,请查看 jQuery Deferred Reporter Plugin

jQuery.when 也已更新为接受任何 thenable 对象,其中包括本机 Promise 对象。

https://github.com/jquery/jquery/issues/1722
https://github.com/jquery/jquery/issues/2102

为 Deferred 添加了 .catch()

catch() 方法被添加到 promise 对象中,作为 .then(null, fn) 的别名。

https://github.com/jquery/jquery/issues/2102

错误案例不会静默失败

也许在某个深刻的时刻,您会想知道:“窗口的偏移量是多少?” 然后您可能意识到这是一个疯狂的问题——窗口怎么可能拥有偏移量?

在过去,jQuery 有时会尝试让像这样的一些案例返回某些内容,而不是抛出错误。 在询问窗口偏移量的特定案例中,到目前为止的答案一直是 { top: 0, left: 0 }。 使用 jQuery 3.0,这些案例将抛出错误,以便不会默默忽略疯狂的请求。 请尝试此版本,看看是否有任何代码依赖于 jQuery 来掩盖无效输入的错误。

https://github.com/jquery/jquery/issues/1784

删除了已弃用的事件别名

.load.unload.error,自 jQuery 1.8 起已弃用,现在已不再存在。 使用 .on() 注册侦听器。

https://github.com/jquery/jquery/issues/2286

动画现在使用 requestAnimationFrame

在支持 requestAnimationFrame API 的平台上,几乎所有平台都支持 IE9 和 Android<4.4,jQuery 现在将在执行动画时使用该 API。 这应该会产生更流畅的动画并使用更少的 CPU 时间——并且在移动设备上还可以节省电池电量。

jQuery 几年前尝试使用 requestAnimationFrame,但与现有代码存在 严重的兼容性问题,因此我们不得不将其回滚。 我们认为我们已经通过在浏览器选项卡不可见时暂停动画解决了大多数这些问题。 尽管如此,任何依赖于动画始终以近乎实时运行的代码都在做出不切实际的假设。

某些 jQuery 自定义选择器的速度大幅提升

感谢 Google 的 Paul Irish 的侦探工作,我们确定了一些可以跳过大量额外工作的情况,当在同一文档中使用像 :visible 这样的自定义选择器多次时。 该特定案例现在快了 17 倍!

请记住,即使有了这项改进,像 :visible:hidden 这样的选择器也可能很昂贵,因为它们依赖于浏览器来确定元素是否实际显示在页面上。 在最坏的情况下,这可能需要完全重新计算 CSS 样式和页面布局! 虽然我们通常不阻止使用它们,但我们建议测试您的页面,以确定这些选择器是否会导致性能问题。

此更改实际上已包含在 1.12/2.2 中,但我们想重申一下 jQuery 3.0。

https://github.com/jquery/jquery/issues/2042

如上所述,升级指南现在可供任何准备尝试此版本的人使用。 除了有助于升级之外,它还列出了更多值得注意的更改。

jQuery 1.12.4 和 2.2.4 发布

发布于 作者

jQuery 1.12.4 和 2.2.4 已发布! 这些是包含一些错误修复的小版本。 我们修复了那些使用 AMD 源代码的人遇到的一个粘性问题,以及 1.12.3 中的“:visible”选择器错误。

如果您需要任何帮助进行升级,请查看 最新版本的 jQuery Migrate 插件。 请注意,jQuery Migrate 1.4.1 旨在与这些 1.x 和 2.x 版本配合使用,而不是 jQuery 3.0。 jQuery 3.0 尚未发布——但我们很快会为您提供 RC——但 jQuery 3.0 也会发布另一个版本的 Migrate。

我们不期望此版本有任何破坏性更改,但如果您在从以前的版本升级时遇到错误,请 告诉我们

完整的变更日志

2.2.4GitHub 变更日志

1.12.4GitHub 变更日志

下载

您可以直接从 jQuery CDN 包含这些文件,或将它们复制到您自己的本地服务器。 1.x 分支包括对 IE 6/7/8 的支持,而 2.x 分支则不包括。

https://code.jqueryjs.cn/jquery-1.12.4.js
https://code.jqueryjs.cn/jquery-1.12.4.min.js

https://code.jqueryjs.cn/jquery-2.2.4.js
https://code.jqueryjs.cn/jquery-2.2.4.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方式的信息,请访问 https://jquery.org.cn/download/。公共 CDN 今天会收到其副本,请给它们几天时间来发布文件。如果您急于开始,请使用我们 CDN 上的文件,直到它们有机会更新为止。

非常感谢所有参与此版本的人,包括测试、报告错误或提交补丁的人,包括 Oleg GaidarenkoMichał Gołębiowski 和整个 jQuery 团队。

jQuery Migrate 1.4.1 发布,以及通往 jQuery 3.0 的道路

发布于 作者

jQuery Migrate 插件 1.4.1 版本已发布。它只有一些改动,但最重要的修复了一个未加引号的选择器的问题,这个问题在一些 WordPress 主题中非常常见。在大多数情况下,当 Migrate 与 jQuery 1.12.x 或 2.2.x 一起使用时,可以自动修复此问题,尽管它可能无法修复一些复杂的选择器。好消息是,WordPress 主题中报告的所有未加引号的选择器案例都可以通过此版本的 Migrate 修复!

你可以从所有熟悉的地方获取这个新版本

jQuery CDN: https://code.jqueryjs.cn/jquery-migrate-1.4.1.jshttps://code.jqueryjs.cn/jquery-migrate-1.4.1.min.js

npm: 只需要 npm install jquery-migrate@1.4.1,该包在 https://npmjs.net.cn/package/jquery-migrate 上列出。

Bower: 在你的 bower.json 文件中,在 dependencies 部分使用以下内容来复制 CDN 文件

 "dependencies": {
    ...
    "jquery-migrate": "https://code.jqueryjs.cn/jquery-migrate-1.4.1.js"
  },

和往常一样,我们建议你将 jQuery Migrate 用作一个工具,用于查找和修复问题,以便将网站升级到新版本的 jQuery 及其相关插件。非压缩版本在控制台上提供了广泛的诊断信息。请充分利用它们,我们为你构建了它们!

Migrate 和 jQuery 3.0

jQuery Migrate 将继续发挥其使 jQuery 升级更容易的作用。jQuery Migrate 3.0 的候选版本即将发布。

由于多年积累的更改,不可能有一个版本的 jQuery Migrate 可以支持从 jQuery 1.6(五年前!)到 jQuery 3.0 的所有更改。因此,使用 Migrate 3.0,我们建议以下流程来升级到 jQuery 3.0

  • 如果你还没有这样做,请升级到最新版本的 1.x 或 2.x jQuery,以及最新版本的 1.x jQuery Migrate。(截至今天,即 jQuery 1.12.3 或 jQuery 2.2.3,与 jQuery Migrate 1.4.1 结合使用。)
  • 修复你在控制台中看到的 Migrate 1.x 警告消息 中标识的任何问题。
  • 移除 Migrate 1.x 插件,并确保页面在没有加载它的情况下仍然可以正常工作。
  • 升级到最新的 jQuery 3.x 和最新的 jQuery Migrate 3.x。
  • 修复你在控制台中看到的 Migrate 3.x 警告消息 中标识的任何问题。
  • 移除 Migrate 3.x 插件,并确保页面在没有加载它的情况下仍然可以正常工作。

请在探索 jQuery 的最新版本时使用 jQuery Migrate 3.0,它将大大简化问题的查找。我们希望这个插件成为一个让你的开发生活更轻松的工具。如果你发现问题,可以在 问题跟踪器 上报告它们。

非常感谢 jQuery 核心团队的帮助,以及 Github 用户 ekonoval 提供了一个非常有用的错误报告!