jQuery 核心:1.9 版本及以后
在得出错误结论之前,请查看 后续文章 。
正如上一篇博客文章所讨论的那样,jQuery 1.8 版本正在进行春季大扫除,以删除不安全、效率低下、无效和不可取的功能。我们还开始着手允许您构建自定义版本,这些版本会排除库的某些部分,以实现更大的节省。这些努力将使您能够享受所需的 jQuery API,而无需携带您不需要的部分。
现在我们已经打扫了房屋,是时候展望未来。只有一件事阻碍着我们对未来的愿景,那就是过去浏览器的幽灵。Internet Explorer 6、7 和 8(统称为老 IE)在过去十年一直是 Web 开发人员的眼中钉。总的来说,这些过时的浏览器仍然占一些网站访问用户的比例高达三分之一。这可不少用户,这些人仍然需要网站提供的资讯、服务和产品。对于许多使用 jQuery 的网站而言,忽视这些受众并不切实际也不合算。
jQuery 的构想就是专门为了解决浏览器之间的差异而产生的,因此我们不会放弃我们理念的本质,仅仅无视数百万仍然使用老 IE 的活跃 Internet 用户(无论出于何种原因)。但我们也希望继续前进,并利用现代浏览器,特别是不断增长的移动市场。
未来之路
jQuery 1.8 版本应该会在一个月内发布。以下是我们对接下来的两个 jQuery 版本以及它们发布时间的思考。
- **jQuery 1.9(2013 年初):**我们将删除 1.8 版本中已弃用的许多接口;其中一些接口将作为插件或 jQuery 项目支持的替代 API 可用。将继续支持 IE 6/7/8,与今天一样。
- **jQuery 1.9.x(2013 年及以后持续进行):**此版本将继续修复任何回归问题、新浏览器错误等。
- **jQuery 2.0(2013 年初,紧随 1.9 版本):**此版本将支持与 jQuery 1.9 版本相同的 API,但会删除对 IE 6/7/8 特性的支持,例如有问题的事件模型、IE7 的“attroperties”、HTML5 shim 等。
我们的目标是让 1.9 和 2.0 在它们支持的 API 集方面可以互换。当 2.0 发布后,您选择哪个版本应该很简单:如果您需要 IE 6/7/8 支持,请选择 1.9;否则您可以使用 1.9 或 2.0。
问答
**如果 jQuery 1.9 和 2.0 基本上是相同的 API,那么 2.0 的优势是什么?**体积更小、性能更好,以及不再需要老 IE 支持而带来的问题。例如,我们预计可以在 2.0 中改进 $.Deferred 实现中的错误处理,而只要老 IE 仍然得到支持,我们就无法做到这一点。
**我的网站仍然有许多 IE7/8 访问者,但我想要使用 jQuery 2.0。可以这样做吗?**如果您的网站需要老 IE 支持,而我们预计大多数网站至少还需要一两年才能放弃这种支持,您可以使用 IE 条件注释,仅当访问者使用老 IE 时才包含 1.9 版本。
<!--[if lt IE 9]> <script src="jquery-1.9.0.js"></script> <![endif]--> <!--[if gte IE 9]><!--> <script src="jquery-2.0.0.js"></script> <!--<![endif]-->
**为什么不为 jQuery 2.0 创建一个“老 IE 插件”?**在 jQuery 中,老 IE 的特殊处理方法是分散的。将代码重构以提供足够的挂钩,以便老 IE 支持可以作为插件添加,会使现代浏览器情况下的代码变得复杂。此外,支持老 IE 并使用公共 CDN 的开发人员将需要包含两个文件(jQuery 2.0 和老 IE 插件),而不是一个文件。
**jQuery 2.0 发布后,1.9 会怎么样?**与过去不同的是,我们将继续修复 1.9 版本中的错误(作为次要版本)。由于 1.8 和 1.9 版本刚刚经历了春季大扫除,我们预计将来不会添加太多新 API。相反,我们更愿意通过与两个版本兼容的插件添加新功能,只要这样做有意义。因此,请不要担心使用 1.9 版本会被落下。
**jQuery 2.0 基本上是为移动设备设计的吗?**不是的。虽然 jQuery 2.0 非常适合 HTML 移动应用程序,包括使用 jQuery Mobile 编写的应用程序,但它不是一个仅限 Webkit 的库,它仅针对 iOS 和 Android。除了移动浏览器之外,2.0 还将支持(并经过测试!)Internet Explorer、Opera、Firefox、Safari 和 Chrome 的现代桌面版本。
**jQuery 2.0 的体积会小多少?速度会快多少?**在完成之前,或者至少接近完成之前,我们不会知道。您可以相信,我们会随着 2.0 版本发布日期的临近,告诉您更多信息。更好的是,您可以试用发布的 beta 版,亲身体验!
放弃对老 IE 版本的支持是明智之举。现在更容易向客户解释为什么我们的代理不再支持老 IE 版本。因为这是在浪费时间。
PS:我期待着这个更快的全新核心 :)
看起来 jQuery 团队现在正在推动他们努力让其他公司停止使用的标准。
我理解放弃对 IE6 甚至 IE7 的支持,但为什么是 IE8?IE8 仍然占浏览器市场的 10%,而且需要的修补程序只有 IE6 和 IE7 的一半。我认为放弃 IE8 为时过早。
这是好事。我已经完全放弃了对 6 和 7 的支持,而且我很少花时间处理 8。我只确保网站正常运行,并且外观基本正确,然后就结束了。到明年,IE8 的使用率会进一步下降。但即使 IE8 的使用率仍然很高,也无关紧要。那些说由于拥有大量的 IE8 用户群而无法使用 jQuery 2.0 的人,做法是错误的。您不应该开发需要任何 JavaScript 的网站。从渐进增强角度出发进行构建。IE6-8 用户仍然应该看到一个在禁用 JavaScript 后仍然可以正常运行的网站。拥有现代浏览器的用户将获得一个带有所有炫酷功能的漂亮网站。我所有的网站都是从零 JavaScript 开始构建的,然后我会根据需要使用 jQuery 添加其他内容。在我看来,这才是应该的做法。
好消息!再见,IE6!
感谢您有勇气放弃对那些糟糕浏览器的支持。而且即使这样,您仍然会通过 1.9 版本支持它们一段时间,所以即使那些仍然生活在 2000 年的开发人员也不会真正被落下。
@TedWood
1) IE8 的代码库可能与 IE6/7 非常相似,但它的错误要少得多,功能也要多得多。处理 IE6/7/8 的绝大多数特殊情况仅适用于 IE6,其余大部分则适用于 IE7。与之相比,IE8 实际上已经很好了。在不需要支持 IE6/7 的情况下支持它实际上是一个相当不错的概念。
2) 我并没有期待添加新的“功能”;我期待的是对 IE8 的持续支持——也就是说,我可以使用 jQuery,并且知道如果发现问题,它会得到修复,我可以使用该修复程序。我并没有关注 1.9/2.0 过渡期;我关注的是此后,即 2.1 发布之后。除非他们计划在那之后继续支持 1.9,否则这对很多人来说将是一个大问题。
3) 我正在查看当前的浏览器统计数据,没错,你说得对:IE8 正在下降。然而,它还没有下降到可以放弃支持的地步,而且可能还需要几年才能达到这种程度。
@Andrew
我查看了我的分析数据。IE(总计)在我的大多数开发网站中占用户比例约为 12%。
因此,它本质上可以一跃而起……
“如果您依赖 jQuery 来解决浏览器问题,那么您要么正在处理一些边缘情况的项目,要么我建议您使用其他方法来解决这些问题。”
真的吗?这似乎很奇怪,因为 jquery.com 上的三个主要卖点之一是“跨浏览器”。另外两个是“轻量级占用空间”(好吧……)和“css3 兼容”。
来吧。消除跨浏览器问题是大多数人开始使用 jQuery 的主要原因。我是否需要 jQuery 为我将“querySelectorAll”封装在“$”中?我认为如果只关心具有内置选择引擎的浏览器,我可以自己处理这些代码。如果每个浏览器都返回相同的值来表示“innerWidth”,那么我为什么需要 jQuery 的方法呢?
jQuery 的价值不仅仅是一堆用于移动节点的方法,或是一堆其他库中很容易获得的实用程序方法。这很好,但只有在我们能够确保它在任何地方都能正常工作时才重要。这就是重点。
我认为这其中的大部分争论都是语义学和推测。一个可能有所帮助且不会偏离您当前计划的建议是更改版本的命名约定和打包方式。您已经谈到了创建仅包含所需部分的“自建”版本 jQuery 的能力。不要使用 1.9 和 2.0 版本,只需让人们能够包含或不包含兼容性层。为什么在它们具有相同 API 的情况下,还要使用两个不同版本造成混淆呢?
我认为使用相同的版本号,但添加一个字母设计器来说明它是旧 IE 兼容的版本 1.9 或 1.9c 会更简单。在打包自己的 jQuery 设置时,您还可以选择包中是使用常规组件还是 c 组件。
也许我错了,但我认为这会减少版本方面的混淆和不确定性,并有助于保持对旧 IE 兼容组件的关注。
我个人迫不及待地想看到旧 IE 消失,我甚至考虑在我的页面上添加链接,引导旧 IE 用户升级。希望通过一些礼貌的敦促,我们可以让更多用户离开 IE6/7/8。我并不在乎他们使用什么浏览器,只要不是那些就行。
让我在这里也插一句。我喜欢 jQuery!但真正酷的是一个可以执行基本 Ajax 并检测代码中是否引用了 jQuery 的某个部分,然后懒加载它的微型存根。这样,您就真正只获得了所需的那些部分,它们也会保留在浏览器缓存中。此外,您始终可以选择定期加载所需的部分,或通过引用任何您想要的插件来利用它们。
正如已经提到的,JS 库最初之所以存在,就是因为跨浏览器问题。所以,有人只需要编写一个 jQueryQuery 元库,它可以为您处理条件注释。只需一个脚本标签,和以前一样,它会根据浏览器注入正确的 jQuery 版本。 ;)
如果/当其他库效仿时,这将非常有趣,因为那时区别在于库实际提供的功能。这始终是一个区别,但它从未像它们处理浏览器问题的方式以及效率那样重要。
免责声明:我的企业客户主要是 IE 用户。IE7/8 以及一些 IE9。我必须确保所有这些网站在这些浏览器中都具有 100% 的兼容性。
我不明白那些谈论完全放弃 jQuery 的人,因为 jQuery 2.0 将在至少一年后发布,并且将不再支持它。
您到底在开发什么,必须在每次发布新版本时都立即升级 jQuery 版本?我想没有包含大量 jQuery 代码的项目。
在对网站进行 QA 测试并发布后,我们通常会“冻结”网站,因为更新 jQuery 版本可能会引入错误。我们的网站在 jQuery 1.4+ 上运行良好。请注意,jQuery UI 甚至支持 jQuery 1.3.x。
我很有可能会在 jQuery 1.9 发布后使用它,而不会使用条件注释。我认为在很长一段时间内,我们都没有必要迫切地切换到 2.0。在那段时间内,在最坏的情况下,可以使用条件注释。
VICTOLY
停止支持旧 IE 并不要退缩。
终于,我已经做了 10 多年的网页设计了(信不信由你),这应该是在那个完全糟糕的系统的棺材上钉上的一颗大钉子。
对于所有那些“我仍然支持 IE6,因为我的曾祖母还在用它”的人来说,你们在这个行业中没有立足之地,现在就离开吧。
我们一年前停止了对 IE6 的支持。我们在 6 个月前停止了对我们 50% 网站的 IE7 支持。我们将在本月内完全停止对 IE7 的支持。IE8?那还需要一段时间,它与 jQuery 团队的计划时间完美契合。如果 1.9 在明年发布,我们将使用条件注释来选择合适的库。只要 1.9 得到支持,并且与 2.0 同步,这可能需要一年时间,那么对我们来说就可以了。
如果它比预期更早地停止支持,或者如果 1.9/2.0 不同步,那么我们必须在那个时候冻结 jQuery。
很好。
这会导致一些工作和困难,但与过去 10 年 IE 造成的那些工作和困难相比微不足道。
可耻的是,如果世界上三分之一的网站一夜之间无法访问 IE 用户,微软可能会在一两周内发布 IE 问题的真正解决方案。
照目前情况来看,他们将一直拖到 2022 年,只做足够多的工作来避免起诉,而没有做足够多的工作让世界相信标准可以在没有微软的完全批准或 20 年的艰苦奋斗、耗费数百万工时的情况下设定。
无论今天看起来如何,从更大的角度来看,对微软来说这可能是一个双赢的局面。
如果您停止支持 IE8,那么您将失去所有仍然使用 XP 桌面系统的企业用户。因此,大多数开发将在未来几年内坚持使用 1.x 版本。
恕我直言,您至少应该支持 IE8,直到 XP 结束使用,然后停止支持它。
所有使用 jQuery 的政府网站各个层级怎么办?政府部门通常比平时更长时间地坚持使用旧版本的浏览器。您可能会说这无关紧要,因为用户和公众不太可能受到同样的限制,但这假设您没有在需要在公共办公室展示的网站上提供公共办公室/服务。
例如,图书馆(属于地方政府),其公共电脑使用旧版本的浏览器,如果他们在网站上使用 jQuery,可能不得不使用旧版本的 jQuery(以便它可以在这些公共电脑上正常工作)。
中国的情况怎么样?那里有 35% 的人还在使用 IE6?
IE10 中将不再存在条件注释,因此文章中提出的解决方案将无法在 IE10 中运行,因为 IE10 不会加载 jQuery 文件。
我非常支持这一举措。通过支持旧版和过时的浏览器,你实际上是在让自己停滞不前。通过在 2.0 版本中放弃对它们的兼容性,我们终于可以向前发展,并针对当前和最新的技术进行优化。
向后兼容性是有道理的,但只有在一定程度上才说得通。随着时间的推移,为了保持竞争力,我们必须不断前进。对十年前的 Internet Explorer 6 来说,这个时刻已经过去,我拒绝再让 Internet Explorer 7 兼容。随着 IE8 在 2015 年(XP 支持正式停止)被淘汰,现在是时候只向前发展 2.0 版本了。
继续努力!
到 2013 年,放弃对旧版 IE 的支持就足够有意义了。使用这些旧版浏览器的人可能根本不在任何人的目标用户范围内。在我看来,IE6/7 已经死了。IE8 将一直存在,直到 XP 停止支持(因为它是 XP 可以更新到的最高版本)。但使用 IE8 的人要么是头脑简单的人,要么是公司里的死板员工,要么是进行测试的开发者 ;]
我唯一担心的是,我们的一些网站被西欧最大的雇主(拥有超过 100 万名员工!)使用,他们仍然使用 IE6,因为所有核心 Web 应用程序都是在 IE6 上开发的,并且与其他版本的 IE 或其他 Web 浏览器不兼容。
@James: 嗯,这就是令人悲伤的事实…… 我不明白这些公司怎么能如此落后。但这是 IT 部门的错,他们中的许多人出于某种原因害怕改变,幸运的是,我们客户的 IT 部门已经意识到更新并不会杀死你。
我认为放弃对 IE7 及更低版本的兼容性是明智的,但 IE8 可能应该继续支持一段时间。因为尽管统计数据显示旧版 IE 的使用率越来越低,但大多数 Firefox 和 Chrome 用户都是个人用户,而 IT 公司的大多数客户都在企业中,他们主要使用 IE。