jQuery 3.0:新一代

发布于 作者

很难相信 jQuery 发布已经近八年了。这些年来,Web 开发发生了很大变化,jQuery 也随之改变。在所有这些时间里,团队一直试图在维护与过去代码的兼容性与支持当前最佳 Web 开发实践之间取得平衡。

这些最佳实践之一是语义版本控制,简称 semver。在实际意义上,semver 让开发人员(和构建工具)了解迁移到新软件版本所涉及的风险。版本号采用 MAJOR.MINOR.PATCH 的形式,三个组成部分都是整数。在 semver 中,如果 MAJOR 数字更改,则表示 API 中存在重大更改,因此开发人员需要注意。

版本控制的概念在 jQuery 中更加微妙,其中浏览器兼容性与 API 兼容性一样重要。为了创建更精简的 jQuery,团队从 2013 年开始发布两个版本。第一个版本仍然以 1.x 线编号,目前为 1.11.1,保持与最大数量浏览器的兼容性。第二个版本从 2.0.0 开始,现在为 2.1.1,放弃了对 IE8 或更低版本浏览器的支持,以简化代码。jQuery 的 1.x 和 2.x 版本都具有相同的公共 API,尽管它们在内部实现方面略有不同。

我们接下来的版本将使用不同的命名法。和以前一样,将有两个不同的发布文件。现在 1.11.1 版本的后继版本将成为 **jQuery Compat 3.0**。jQuery 2.1.1 的后继版本将是 **jQuery 3.0**。npm 和 Bower 上有两个不同的,但它们共享相同的版本以表明它们具有相同的 API 行为。

从这些版本开始,我们还将重新调整浏览器支持策略。主要 jQuery 包通过支持其发布时常见的常青浏览器(特定浏览器的当前版本和前一个版本)保持小巧而紧凑。我们可能会根据市场份额在这个包中支持更多浏览器。jQuery Compat 包提供了更广泛的浏览器支持,但以更大的文件大小和潜在的更低性能为代价。

尽管版本号大幅跃升,但我们预计大多数当前 jQuery 代码不会出现太多迁移问题。我们只是在这次版本升级中成为良好的 semver 市民。使用 jQuery Migrate 插件 的新版本可以检测到删除弃用方法等更改,使其易于查找和修复。我们将在未来的博客文章中详细介绍这些更改。

因此,以下是 jQuery API 3.0 版本的 TL;DR

  • 如果您需要支持各种浏览器,包括 IE8、Opera 12、Safari 5 等,请使用 jQuery-Compat 3.0.0 包。我们建议大多数网站使用此版本,因为它为所有网站访问者提供了最佳兼容性。
  • 如果您的网站仅为常青的领先浏览器构建,或者是在 Webview(例如 PhoneGap 或 Cordova)中包含的基于 HTML 的应用程序,并且您知道正在使用的浏览器引擎,请使用 jQuery 3.0.0 包。
  • 在我们宣布之前,这两个包都将在相应编号的主版本和次版本中包含相同的公共 API。这将使开发人员能够轻松地在两者之间切换,并与第三方 jQuery 插件最大程度地兼容。

在每个将来的版本中,我们将在 npm 和 bower 上提供这两个包。这两个包也将在 jQuery CDN 上作为单个文件构建提供。从那里使用它们很简单,只需根据您的需要包含 jquery-compat-3.0.0.js 或 jquery-3.0.0.js 即可。我们已经与运营 Google CDN 的人员进行了交谈,他们也将支持这两个包。

随着我们 3.0 版本的进一步进展,我们将更新有关代码更改、支持的浏览器等方面的详细信息。敬请关注!

jQuery 3.0:新一代”上的 82 条评论

  1. 如果 jQuery 的现代和“compat”3.x.x 版本定期同时发布并保持它们之间的 API 一致性,那么开发人员就可以实现服务器端浏览器检测,并根据需要动态提供合适的库。只要避免代理的中介缓存,浏览器仍然可以缓存脚本以供重复使用,从而避免额外的往返主机之旅。

  2. Michał Gołębiowski on 说:

    Dave Ward:让 jQuery Compat 仅使用 jQuery 并修补方法是不可能的。这两个版本之间的差异非常大,一些模块已经完全改变。

    我们可能(也许,不要依赖我)将来会为 Android 2.3 做到这一点,但 IE<9 实在太糟糕了。

  3. 我想我真的需要更多信息才能得出任何结论。但感觉2.x才刚刚站稳脚跟,现在3.x就出现在地平线上?感觉不对。而且有一个“Compat”版本的jQuery在我看来并没有真正简化事情……例如,jQuery Compat 3.0 和 jQuery 1.1.1 之间有什么区别?内部有一些重大变化,但表面上的 API 仍然相同吗?

  4. yguedidi 说:

    +1 支持 SemVer。
    那么为什么不在 CDN 上添加一个 jquery-3.js 或 jquery-3.x.js,它将始终返回最新的次要版本呢?

  5. 米夏尔·戈伦比奥夫斯基 说:

    @yguedidi
    > 那么为什么不在 CDN 上添加一个 jquery-3.js 或 jquery-3.x.js,它将始终返回最新的次要版本呢?

    因为引用 CDN 上会更改的文件是一种不好的做法。它基本上会阻止缓存;此外,每个补丁版本都可以(不应该,但它可以)引入中断,所以你应该始终自己更新 jQuery,而不是在活动网站上自动更新。

  6. m_gol 说:

    @数字果园
    > 但感觉2.x才刚刚站稳脚跟,现在3.x就出现在地平线上?

    为什么这很重要?它只是一个版本号,我们不想破坏那些在 npm 上包含“^1.11.0”的人,这会自动捕获 1.12.0。

    > 例如,jQuery Compat 3.0 和 jQuery 1.1.1 之间有什么区别?内部有一些重大变化,但表面上的 API 仍然相同

    jQuery Compat 3.0.0 将是 jQuery 1.11.1 的延续。这将是本来应该被称为 jQuery 1.12.0 的东西。

    > 内部有一些重大变化,但表面上的 API 仍然相同吗?

    API 变化不大,但会有重大更改。

  7. 格伦 说:

    名称可以改为类似于
    JQueryWeb

    JQueryEmbedded

    这样,就没有简单的“JQuery”,这可能会与旧版本混淆。此外,任何在公共网站上使用 JQuery 的人都应该支持的不仅仅是最新的浏览器版本。Web 版本将支持所有常用浏览器(例如,不包括 IE6 等)。

  8. 罗伯特 说:

    你们会更新 jQuery 的 Deferred 和 Promises 实现以匹配 ECMAScript 6 Promises 规范吗?如果所有 Promises 都能承诺相同的 promise,那就太好了。

  9. @罗伯特

    > 你们会更新 jQuery 的 Deferred 和 Promises 实现以匹配 ECMAScript 6 Promises 规范吗?

    是的,我们已经有一个补丁了;它很快就会发布。