jQuery 大会 2010:旧金山湾区宣布

发布日期 作者

Microsoft Silicon Valley Research CenterjQuery 项目非常高兴地宣布我们的首届旧金山湾区大会日期。大会将于 2010 年 4 月 24 日和 25 日在加利福尼亚州山景城的 微软硅谷研究中心 举行。

旧金山湾区大会是 jQuery 项目在 2010 年计划的四场活动中的第二场。第一场是 jQuery14 活动,今年晚些时候将在欧洲和东海岸举办其他会议。

这个场地是该项目迄今为止合作过的最大的场地(2007 年哈佛法学院、2008 年麻省理工学院斯塔塔中心和 2009 年微软新英格兰研究中心),我们预计门票会很快售罄。

注册目前计划于 3 月 17 日星期三开始;票价为 199 美元。除了普通门票外,我们还提供数量有限的优惠学生票,价格为 99 美元,需出示有效的学生证。

请关注 jQuery 博客jQuery Twitter 订阅,了解注册开放通知。

以下是一些您可能期望看到的内容的简要概述

  • jQuery
  • jQuery UI
  • jQuery 插件
  • 复杂应用程序开发
  • jQuery 案例研究

除了为期两天的 jQuery 会议外,我们还将在主活动之前额外增加一天的 jQuery 培训。该培训将由 appendTo 提供,旨在帮助您和您的团队在参加会议之前快速了解 jQuery。培训将涵盖以下主题

  • jQuery 简介
  • 查找内容
  • 进行操作
  • 链式调用
  • jQuery UI 简介
  • 实现 jQuery UI 小部件

培训将于 4 月 23 日在旧金山市中心的微软旧金山办事处举行;票价为 299 美元。所有培训收益将捐赠给 jQuery 项目。

有兴趣演讲吗?请填写我们的 演讲提交表格 并关注 jQuery 博客 以获取更新。

jQuery 1.4.2 发布

发布日期 作者

jQuery 1.4.2 现已发布!这是基于 jQuery 1.4 的第二个次要版本,修复了 1.4 版本中的一些突出错误,并实现了一些不错的改进。

我要感谢以下为本版本提供补丁的人:Ben Alman、Justin Meyer、Neeraj Singh 和 Noah Sloan。

下载

与往常一样,我们提供两个版本的 jQuery,一个缩小版(我们现在使用 Google Closure Compiler 作为默认缩小器)和一个未压缩版(用于调试或阅读)。

您可以随意将以上 URL 直接包含到您的网站中,您将获得快速加载的 jQuery 的全部性能优势。

此外,您还可以直接从 Google 或微软的 CDN 加载 URL

新功能

可以在 jQuery API 网站上的 1.4.2 类别 中找到 API 更改的完整列表。

在本版本中,我们添加了两个新方法:.delegate().undelegate()。这些方法充当 jQuery 中现有 .live().die() 方法的补充。它们简化了从文档中的某个根节点观察特定事件的过程。

例如

$("table").delegate("td", "hover", function(){
	$(this).toggleClass("hover");
});

这等效于使用 .live() 编写的以下代码

$("table").each(function(){
	$("td", this).live("hover", function(){
		$(this).toggleClass("hover");
	});
});

此外,.live() 粗略等效于以下 .delegate() 代码。

$(document).delegate("td", "hover", function(){
	$(this).toggleClass("hover");
});

有什么变化?

在本版本中,代码进行了大量重写,既是为了性能,也是为了修复长期存在的问题。

性能改进

与几乎每个 jQuery 版本一样:我们努力继续改进代码库的性能,确保您获得性能最佳的 JavaScript 代码。

根据 Taskspeed 基准 提供的数据,与 jQuery 1.4.1 相比,我们已经将 jQuery 的性能提高了约 2 倍,与 jQuery 1.3.2 相比提高了约 3 倍。

jQuery Taskspeed Results (Feb 14, 2010)

具体来说,我们改进了 jQuery 中 4 个方面的性能

虽然 Taskspeed 等综合基准测试如果分解成各个子测试进行进一步研究会很有趣,但作为项目,我们倾向于避免将它们用作真实、整体库性能的准确衡量标准。考虑到构成库的许多方面,以及它们提供的不同技术,累积结果很少能反映实际用户使用库的方式。

例如,我们只是通过优化 $("body") 选择器在 Taskspeed 中看到了显著的整体性能提升,因为它在测试中被调用了数百次。此外,我们通过优化 .bind().unbind() 提高了性能,性能提升仅为毫秒级,这微不足道,尤其是考虑到在您绑定数百个事件的情况下,您可能希望使用 .live().delegate() 而不是使用 .bind().unbind()

我们还收集了其他主要库的一些 结果,但我们对这些结果不太感兴趣,更感兴趣的是我们相对于 jQuery 本身的旧版本所取得的性能改进。

我们将继续优化 jQuery 代码库,无限制地优化。尽可能提供最快的 JavaScript/DOM 开发体验一直是我们主要关注的问题。而且,可能永远都有方法可以提高性能,无论是通过内部优化还是通过将关键功能推送到浏览器端以进行标准化。

事件重写

最大的内部更改来自事件模块的急需的结构性重写。通过这些修复,解决了与事件绑定相关的许多怪异问题。

具体来说,事件处理程序不再作为对象属性存储在 jQuery 的内部对象存储中(带有附加到处理程序的元数据)。而是,它们现在存储在内部对象数组中。

如果您曾经有机会在 jQuery 元素上使用 .data("events"),您会发现它会返回一个包含当前绑定的所有事件类型的对象。

为了枚举这次重写期间发生的一些更改

  • 现在可以普遍绑定具有不同数据、命名空间和事件类型的相同处理程序。
  • 在某个处理程序删除自身(或其同级处理程序)后,事件处理程序的执行将继续。
  • 我们不再将数据/命名空间信息直接附加到事件处理程序(仅一个唯一的跟踪 ID)。
  • 我们不再在内部使用代理函数来尝试封装处理程序。
  • 事件的执行顺序现在在所有浏览器中都是有保证的。Google Chrome 存在一个长期存在的对象循环逻辑错误,现已绕过。

作为这些更改的副作用,我们不得不更改新公开的特殊添加/特殊删除 API 以适应新的事件数据对象。Ben Alman 正在编写一篇关于 jQuery 特殊事件系统的长篇教程,我们将在该教程发布时发布更多公告。

错误修复

在本版本中,总共关闭了 40 个票证。一些与 jQuery 1.3.2 和 jQuery 1.4.x 之间的差异有关,一些修复了长期存在的问题(例如事件模块重写的情况)。

原始数据

这些是我们收集到的原始数据,用于生成上述图表。

	jQuery 1.3.2	jQuery 1.4.1	jQuery 1.4.2	Prototype 1.6.1	MooTools 1.2.4	Dojo 1.4.1	YUI 3.0.0
FF 3.5	2182	806	 565	 2156	 1073	 575	 1885
FF 3.6	1352	677	 519	 2067	 857	 750	 1494
Opera	983	697	 222	 793	 678	 218	 1201
Safari	610	435	 252	 315	 235	 238	 612
Chrome	1591	703	 293	 271	 312	 222	 745
IE 8	2470	1937	 1141	 3045	 4749	 1420	 2922
IE 7	4468	3470	 1705	 9863	 10034	 1737	 5830
IE 6	6517	4468	 2110	 13499	 11453	 2202	 7295

jQuery.org

发布日期 作者

今天,我们很高兴地宣布全新的 jQuery.org 网站:jQuery 项目的中心。

jQuery.org

jQuery.org 网站由 jQuery 社区成员 Boaz Sender 设计和实现。

您可能会认出旧的 jQuery Docs 网站中的大部分内容,但它经过了重新整理,并以更适合 jQuery 项目的方式呈现。

jQuery.org: Team jQuery.org: History jQuery.org: About

jQuery.org: License jQuery.org: Donate

这次发布与 jQuery 项目的正式化同步,该项目始于我们 加入软件自由保护组织。为更大的 jQuery 项目设立一个官方中心,对于项目的整体未来发展和组织来说应该是有益的。您可以在 关于 jQuery 项目的这段视频 中了解有关该组织的更多信息。


最初发布在 14 天的 jQuery (存档) 中。

新的 jQuery 论坛

发布日期: 作者:

今天,我们正式宣布全新的 jQuery 论坛。过去 4 年,我们一直使用邮件列表,后来又使用 Google Groups 来管理 jQuery 的讨论和社区。对于我们不断增长的讨论需求,这种解决方案在参与度和 垃圾邮件管理 方面都无法满足。

New jQuery Forum

在寻找新的讨论平台时,我们考察了各种解决方案,并提出了几个主要要求:它必须能够处理常规讨论和现在无处不在的问答。此外,我们想要一个能够降低提问门槛的解决方案——任何人都可以使用的解决方案(因此它必须有一个友好的 Web 界面)。

我们还想找到一个对团队维护要求低的解决方案。这意味着要么使用一个托管的解决方案,该解决方案的合作团队非常乐于助人,要么使用一个我们自己托管的解决方案,该解决方案使用起来非常容易,并且拥有良好的开发者社区。

我们最终分析了无数的解决方案,但最终选择了 Zoho Discussions(Zoho 关于迁移的公告)。几个因素促使我们做出这一决定。

  • Zoho Discussions 无缝地整合了常规的论坛式讨论和问答。此外,所有审核和管理工具都围绕构建和管理一个流畅的工作流程来设计,以便回答问题和解决问题。
  • Zoho 的 Discussions 团队非常乐于助人。他们不仅免费提供所有托管服务,而且尽力解决问题并整合我们完整的 Google Groups 历史记录。我们一直在与他们密切合作,他们已经修复了或正在修复我们提出的每一个问题。

jQuery 团队在过去一周内已开始使用新论坛,并且对它的运行情况非常满意。大多数旧的 Google Groups 和所有旧的 jQueryHelp.com 帖子都已整合到新系统中。一旦我们在未来一两周内最终关闭这些群组,我们将对 Google Groups 帖子进行最终导入。

我们已经为讨论开设了一些独立的论坛。

随着时间的推移,我们肯定会根据需要开设更多论坛——特别是针对非英语用户的论坛。

目前,正在积极解决的两个主要问题是

  • 无法接收所有帖子的电子邮件更新。您可以接收订阅帖子的电子邮件更新,以及您创建的帖子的电子邮件更新,但无法同时订阅所有帖子。在此期间,我们建议您订阅 论坛 RSS 订阅,以便查看所有帖子和回复。
  • 网站上的许多页面正在使用“Ajax”方式加载,这将被替换为更传统(也更合适)的页面加载方式。完整的过渡应该很快完成。

我们收集了一些较小的问题,并正在积极与 Zoho Discussions 团队沟通。如果您发现任何其他问题,请随时发布到 关于 jQuery 论坛 论坛。

如前所述,我们分析了许多讨论解决方案——事实上,有几十个。有一些解决方案让我们非常满意,并且进入了最终的竞争环节。

  • Stack Overflow 几乎是网络问答的绝对王者。那里已经有一个 活跃的 jQuery 用户社区。我们考虑过采用现有的 Stack Overflow 社区,以及建立 Stack Exchange 作为可能的解决方案。然而,这两种方法都存在一个重大缺陷:它们不适合处理常规的非问答讨论。如果我们使用其中任何一个解决方案,我们将不得不建立一个额外的论坛或邮件列表来进行简单的讨论。最终,我们决定放弃这些解决方案,转而寻找能够提供更统一社区的解决方案。
  • 我们还考察了许多传统的论坛解决方案,例如 Vanilla Forums。在我们考察过的所有解决方案中,Vanilla Forums 被证明是最符合我们需求的。凭借一个活跃而有组织的插件社区,我们能够找到解决问题的许多方法。然而,最终,没有一种好方法可以使用 Vanilla 或一组插件来提供一致的问答功能。我们将不得不与 Stack Overflow 或其他服务结合使用它。此外,我们必须自己托管和开发解决方案,这需要我们本来可以用于其他方面的时间。
  • 我们还考察了更好的邮件列表解决方案,例如 Librelist,但它们没有提供任何简单的 Web 界面(至少不像论坛解决方案那样),这使得新用户难以参与和获得问题的解答。我们真的不想回到 Google Groups 和其他邮件列表提供商的旧讨论技术。

我们借此机会感谢 Zoho Discussions 团队为帮助我们迁移到他们的软件所做出的所有努力。他们非常乐于助人,我们很高兴能够与他们合作。

此外,我们还要感谢 Chrys Bader、Mike Branski 和旧 jQueryHelp.com 论坛上的其他社区成员的支持和愿意融入新的论坛设置。

再次感谢大家在这次过渡中提供的帮助。我们希望能够很快解决大部分问题,并期待从现在开始的顺利航行。请随时跳到 论坛,并确保 报告您可能遇到的任何问题.


最初发布于 14 天 jQuery已存档)。

14 天 jQuery 摘要:第 1 天 - 第 7 天

发布日期: 作者:

如果您没有关注 14 天 jQuery,以下是迄今为止发布内容的摘要。

预发布第 1 天

  • 新的 jQuery API 网站

预发布第 2 天

  • jQuery 1.4rc1

第 1 天

  • jQuery 1.4 发布
  • jQuery 1.4 直播问答

第 2 天

  • jQuery 1.4 问答的 HD 版本
  • Media Temple 赠品
  • jQuery Podcast 第 7 集,与 John Resig 对谈

第 3 天

  • jQuery 1.4 的内部更改,与 John Resig 对谈

第 4 天

  • 参与 jQuery 社区,与 Karl Swedberg 对谈

第 5 天

  • appendTo 培训图
  • jQuery 1.4 亮点 #1,与 Paul Irish 对谈

第 6 天

  • 企业中的 jQuery

第 7 天

  • 新的 jQuery 论坛
  • jQuery 1.4 亮点 #2,与 Paul Irish 对谈

我们还有 7 天的 jQuery 1.4 内容,其中将包含更多视频和更多发布公告。

再次感谢我们的 优秀赞助商 以及 jQuery 社区的支持,使这样的活动成为可能。我们要感谢所有迄今为止捐赠的人,并提醒大家,在 14 天 jQuery 活动期间,捐赠 20 美元或以上将获得一本免费电子书.

Media Template 赠品

在 14 天 jQuery 活动期间的每天,一位网页开发者将从 jQuery 项目的网页托管提供商 Media Temple 获得为期一年的免费 (gs) Grid-Service 账户。大奖得主将获得一台 13 英寸 MacBook Pro!

为了参加比赛,您必须提交您最酷的 jQuery 使用案例的链接。在 14 天 jQuery 活动期间的每天将选出一位获胜者。大奖得主将在 1 月 29 日(星期五)公布。

查看 Media Template 赠品 网页以获取有关比赛的更多详细信息,并查看公布的每日获奖者。只剩下 7 天了,所以 立即报名

查看 jQuery Enlightenment!

jQuery EnlightenmentjQuery 团队成员 Cody Lindley 出版了 jQuery Enlightenment 一书,如果您还没有查看,那么您一定会想看看。这本书“每一章都包含成为一名经验丰富的 jQuery 开发人员的必要概念”,所以即使您已经有了自己的副本,也为刚开始学习的朋友买一本!更棒的是,所有销售收入的一部分将直接返还给 jQuery 项目,帮助资助未来的发布和项目。感谢 Cody 为 14 天 jQuery 活动慷慨捐赠!

14 Days of jQuery 和新的 API 浏览器

发布时间: 作者:

新年伊始,jQuery 团队一直在努力工作。我们夜以继日地工作,以发布即将到来的 jQuery 1.4 版本,并且有很多东西要宣布!事实上,我们需要整整十四天才能将所有内容都发布出来……因此,我想要宣布 jQuery 1.4 的 14 Days of jQuery

The New jQuery 1.4 Site

从 1 月 14 日开始,我们将启动一个为期十四天的活动。每天我们将提供新鲜的视频和公告——其中包括代码发布、项目相关更新和 jQuery UI 的优秀内容等等。除了公告之外,我们还将在 14 天内发布一系列视频,其中包括与 jQuery 1.4 版本相关的演讲和教程,以及其他一般性 jQuery 主题。您需要每天在 jQuery14.com 上查看两周内的最新内容,或者注册以通过电子邮件接收通知。把它想象成一个在线会议,只是时间更长,更自由,而且带有一些神秘和悬念!

但是,还有更多!

我们为 1 月 14 日安排了很多计划,但似乎提前让您了解一下,并预发布一些美味的 jQuery 小吃是个好主意。前往 jQuery14.com 了解全新 jQuery API 网站的全部信息

请务必订阅 jQuery14.com 网站或 @jquery Twitter 帐户,以在接下来的几周内获得所有更新。

免费书籍,有人要吗?

jQuery 项目是一个非营利性开源项目,我们严重依赖捐赠和贡献来帮助我们为所有工作提供资金。我们将从现在开始,在整个 14 Days of jQuery 活动期间开展筹款活动。如果您是 jQuery 用户,请在活动期间向项目 捐赠 20 美元或更多 以表示您的支持,您将获得一本免费的 jQuery 书籍作为回馈。

始终要记住,如果没有 jQuery 项目赞助商的帮助,这一切都是不可能实现的;NetflixJupiterIT ConsultingappendToFusionary MediaOxide Design Co 都已签约成为 14 Days of jQuery 1.4 的官方赞助商,以及我们最喜欢的 jQuery 图书出版商 ManningPacktjQuery EnlightenmentO’Reilly

目前就到这里——前往 jQuery14.com 获取更多信息!

jQuery 1.3.2 发布

发布时间: 作者:

下载

jQuery 1.3.2
https://code.jqueryjs.cn/jquery-1.3.2.min.js 压缩版(使用 Gzipping 压缩后为 19kb)
https://code.jqueryjs.cn/jquery-1.3.2.js 常规版(120kb)

更改

按文档顺序返回的元素

这是对 jQuery 选择器引擎的更改,它重新排序返回的结果,使其按文档顺序排列,而不是按传递选择器的顺序排列。进行此更改是为了符合 Selectors API 规范(jQuery 在内部使用该规范,适用于支持它的浏览器)。

示例结果

  // jQuery 1.3.1 (and older)
  $("h1, h2, h3")
  => [ h1, h1, h2, h2, h3, h3 ]

  // jQuery 1.3.2
  $("h1, h2, h3")
  => [ h1, h2, h3, h3, h1, h2 ]

我要感谢 Diego Perini 推动我们实施此功能。

.live() 现在可以阻止冒泡

现在可以在回调函数中调用 event.stopPropagation()return false,使其停止 live 事件的冒泡。这意味着现在可以在彼此内部绑定 live 事件,并且内部处理程序可以阻止外部处理程序执行。

例如

  <ul>
    <li><b>Google</b></li>
    <li><b>Yahoo</b></li>
  </ul>
  <script>
    $("li").live("click", function(){
      $(this).addClass("active");
    });
    $("li b").live("click", function(){
      $(this).addClass("active");
      return false;
    });
  </script>

我要感谢 Iraê 为此问题提出的解决方案。

对于那些想知道 .live() 的当前缺失功能(如提交和更改事件)的人来说,您可以期待所有这些功能将在下个月发布的 jQuery 1.3.3 中实现。

:visible/:hidden 大修

我们改变了 :visible 和 :hidden 选择器(在 jQuery 中用于确定元素的可见性)背后的逻辑。

以下是逻辑更改方式
* 在 jQuery 1.3.1(及更早版本)中,如果元素的 CSS “display” 不是 “none”,其 CSS “visibility” 不是 “hidden”,并且其类型(如果它是输入)不是 “hidden”,则该元素可见。
* 在 jQuery 1.3.2 中,如果元素的浏览器报告的 offsetWidth 或 offsetHeight 大于 0,则该元素可见。

此更改意味着什么?这意味着如果元素的 CSS display 为 “none”,或其任何父级/祖先元素的 display 为 “none”,或如果元素的宽度为 0 且元素的高度为 0,则该元素将被报告为隐藏。

进行此切换的好处是什么?结果有两个方面
* 性能要好得多,好得多,好得多。(见下文。)
* 如果元素位于 “隐藏” 元素内(以前无法做到,除非使用插件),则该元素将被报告为 “隐藏”。

我要感谢 Matheus Almeida 提出了一些更改建议,这些更改已实施以提高这些选择器的性能。

.height()/.width() 大修

与宽度和高度相关的选择器都已过时,这极大地提高了它们在所有浏览器中的速度。

我要感谢 Mike Helgeson 在此做出的贡献,这些贡献在很大程度上是我们在这些方法中看到的一些巨大收益的原因。

IE 中的选择器加速

随着来自更大 JavaScript 社区的贡献不断涌现,新 Sizzle 选择器引擎的优势正在逐渐显现出来。已经实施了许多新增功能,这些新增功能有助于提高引擎的性能,尤其是在 Internet Explorer 中。

我要感谢 Fabio Buffoni 在此做出的贡献,这些贡献在很大程度上是这些加速的原因。

.appendTo()/etc. 现在返回插入的元素

这是一个(很小的)API 更改,解决 jQuery API 中的一个错误。appendTo、prependTo、insertBefore、insertAfter 和 replaceAll 现在都返回插入的元素集,而不是原始的元素集。

要理解此更改,我们需要查看一个简单的示例。

假设以下标记,在 jQuery 1.3.1(及更早版本)中,将发生以下情况

  <div></div>
  <div></div>
  <script>
  $("<p/>")
    .appendTo("div")
    .addClass("test");
  </script>

1.3.1(及更早版本)中的结果

  <div><p class="test"></p></div>
  <div><p></p></div>

这是因为 .appendTo 等等只返回传入它的元素,而不是实际插入的元素(由于只有一个段落传入——第一个要插入的段落——因此只有第一个段落添加了类)。

因此,如果您在 jQuery 1.3.2 中运行相同的代码,最终将得到

<div><p class=”test”></p></div>
<div><p class=”test”></p></div>

这是预期的结果。唯一的区别是 appendTo、prependTo、insertBefore、insertAfter 和 replaceAll 现在都推送到 jQuery 堆栈(意味着它们会受到 .end() 的影响)。

我们对上述方法的现有用法进行了调查,发现没有出现此更改会影响任何现有代码的情况,因此我们认为可以安全地进行此更改(特别是考虑到这从一开始就是预期的行为)。

测试

我们有一些关于 jQuery 项目的测试套件和测试方法的公告。
* 我们现在完全支持 Internet Explorer 8rc1 和 Chrome 2(Nightly)(除了我们通常选择的浏览器之外),并且测试套件在这些浏览器中完全通过了。
* 测试套件已突破 1500 个测试(确切地说为 1504 个测试)。

这意味着我们现在在 11 个浏览器中进行积极测试,并在这些浏览器中通过了测试套件:Chrome 1、Chrome Nightly、IE 6、IE 7、IE 8rc1、Opera 9.6、Safari 3.2、WebKit Nightly、Firefox 2、Firefox 3、Firefox Nightly。

(我们在开始完全支持 Opera 10 的下一个测试版之前,正在等待,当前测试版存在一些关键问题。)

为了衡量 jQuery 各个部分的性能,我们使用了修改后的 SlickSpeed 测试套件副本运行我们的测试(已适应处理非选择器测试)。测试运行的原始结果可在下面找到(所有时间都以毫秒为单位)。

选择器测试

我们使用了 Yahoo 首页的副本(一个代表性的复杂网页),并使用了一些人们实际使用的选择器。针对人们目前使用的选择器将有助于提高现有和未来应用程序的性能。

Frameworks	jQuery 1.2.6	jQuery 1.3	jQuery 1.3.2
IE 6		1059		799		626

:hidden/:visible 测试

我们在测试页面中对许多元素进行了 :hidden 和 :visible 选择器测试。

Frameworks	jQuery 1.3	jQuery 1.3.2
Firefox 3	1512		190
Firefox 3.1	1202		161
Safari 3.2	592		80
Safari Nightly	334		43
Opera 9.6	1307		497
IE 6		1948		738
IE 7		1295		830
Chrome		490		30

宽度/高度测试

我们在测试页面中对 width、height、innerWidth、innerHeight、outerWidth 和 outerHeight 方法进行了测试。

Frameworks	jQuery 1.3	jQuery 1.3.2
Firefox 3	310		106
Firefox 3.1	281		84
Safari 3.2	146		37
Safari Nightly	166		32
Opera 9.6	345		116
IE 6		313		124
IE 7		283		123
Chrome		113		27

jQuery 1.3 发布

发布时间: 作者:

jQuery 团队很高兴发布最新的 jQuery JavaScript 库主要版本!此版本投入了大量编码、测试和文档工作,我们对此感到非常自豪。

我要特别感谢 Ariel Flesler 和 Brandon Aaron,他们在修复错误和发布版本方面付出了大量努力。

概述

jQuery 1.3 已经进行了一些重大更改,以下是一些最大且最突出的更改。

Sizzle 选择器引擎

jQuery 拥有一个全新的 CSS 选择器引擎——昵称 Sizzle。我们想要一个引擎,它

  1. 对于最常用的选择器来说,比我们目前的引擎更快。
  2. 完全可扩展(我们不得不在过去版本的 jQuery 中牺牲一些可扩展性以换取性能)。
  3. 完全独立。

就性能而言,我们做得很好,比我们之前的引擎快了大约 49%

考虑到 1.2.6 版本的引擎已经非常快,并且我们在开发过程中获得了很大的扩展性,这一点尤其令人惊讶。

在开发新引擎的过程中,有一件事变得非常明显:我们希望能够与其他库和开发人员合作。我们看到了与一些最优秀的 JavaScript 开发人员进行合作的机会,这将为所有库的用户带来帮助。因此,我们确保 Sizzle 能够完全独立运行(没有依赖关系)。

此外,为了表明诚意和合作意愿,我们已将 Sizzle 的源代码发布到 Dojo Foundation。我们希望有一个共同的平台,让每个人都能够在一起工作,并有一个明确的长期版权所有者。

现在,我们正在与 Prototype、Dojo、Yahoo UI、MochiKit 和 TinyMCE(以及许多其他库)合作开发 Sizzle,使其更加完善。

实时事件

jQuery 现在支持“实时事件”——可以绑定到所有当前和未来元素的事件。使用事件委托和无缝的 jQuery 风格 API,结果既易于使用又非常快。

有关实时事件的更多信息,请参见 .live() 文档。

在处理实时事件时,我们希望找到一个快速且可扩展的解决方案。为此,我们需要一个专门设计用于处理委托元素过滤的(大致来说,就是“此选择器是否与该元素匹配”)选择器引擎。新的 Sizzle 选择器引擎超出了我们的所有预期——速度几乎是我们先前解决方案的 30 倍。

通过使用先进的过滤技术,我们能够为您带来一个事件委托解决方案,该解决方案不会拖慢您的浏览器,并且可以扩展到页面上同时进行数十或数百次委托。

jQuery 事件对象

Ariel Flesler 为 jQuery 1.3 带来了对 jQuery 事件系统的重大重构。此更改的主要内容是新的 jQuery.Event 对象。此对象完全封装了通常在符合 W3C 规范的事件对象实现中找到的所有功能,并使其在所有浏览器中都能顺畅运行。

还有一些与事件系统相关的单独更改,将在后面的事件部分中详细介绍。

HTML 注入重写

与将 HTML 注入文档(例如 append、prepend、before 和 after 方法)相关的所有代码都已进行了全面检修。在分析 jQuery 应用程序时,我们发现这是最常见的瓶颈之一,因此急需改进。提供的功能与 jQuery 以前的版本相同,但增加了速度更快(总体速度提高了约 6 倍)的优势。

我们还对 DOM 元素的创建(例如 $("<script/>"))进行了彻底的检修,使其与调用 $(document.createElement("script")) 相同(因此速度更快且更合理)。

偏移重写

Brandon Aaron 认为,对 .offset() 方法进行全面重写是 1.3 版本应有的。从头开始重写,它不仅更好地处理了跨浏览器问题,而且速度也快得多。

与 1.2.6 版本中的 offset 方法相比,性能几乎提高了 3 倍,此重写必将使您的复杂交互更加顺畅。

不再进行浏览器探测

此版本的最后一个主要功能是您可能永远不会看到或直接处理的功能,但这是一个重要的更改,将有助于使 jQuery 更持久且错误更少:从 1.3 版本开始,jQuery 在内部不再使用任何形式的浏览器/userAgent 探测,并且是第一个实现此目标的主要 JavaScript 库。

浏览器探测是一种技术,您根据对代码在未来如何工作的假设进行假设。通常,这意味着假设特定的浏览器错误将始终存在,这通常会导致代码在浏览器进行更改并修复错误时中断。

相反,我们使用一种称为功能检测的技术,通过模拟特定的浏览器功能或错误来验证其是否存在。我们将 jQuery 中使用的所有检查都封装到一个对象中:jQuery.support。有关该对象、功能检测以及此功能提供的功能的更多信息,请参见文档。

请注意,jQuery.browser 仍然存在于 jQuery 中,并且在可预见的将来也会保留(过多的插件和代码片段依赖于它)。也就是说,我们已将其弃用,以鼓励您(以及所有 JavaScript 开发人员)认真考虑在代码中使用功能检测。

升级

在 jQuery 1.3 中,我们尝试最大程度地减少任何重大升级带来的麻烦,并保持所有现有的公共 API。也就是说,请阅读潜在的破坏性更改列表,以了解哪些更改可能会在您的应用程序中造成问题。

注意:许多插件都提供了与 jQuery 1.3 版本相一致的更新版本。如果您在使用某个特定插件时遇到困难,请务必查看是否有新的版本发布。特别是 jQuery UI 和验证插件都提供了与 jQuery 1.3 版本兼容的更新版本。

下载

与往常一样,我们提供了两个版本的 jQuery,一个最小化版本(我们现在使用 YUI Compressor 作为默认的最小化器)和一个未压缩版本(用于调试或阅读)。

https://code.jqueryjs.cn/jquery-1.3.min.js jQuery 最小化版本(18kb 压缩后)
https://code.jqueryjs.cn/jquery-1.3.js jQuery 标准版本(114kb)

此外,Google 还为我们提供了一个托管在他们的服务器上的 jQuery 版本。此版本 jQuery 会自动最小化和压缩,并从 Google 的快速边缘缓存服务器提供。

https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.3/jquery.min.js

您可以随意将上述 URL 直接包含在您的网站中,您将获得快速加载 jQuery 的全部性能优势。

更改

以下是可能导致您的网页出现向后兼容性问题的更改。

  • 已删除 [@attr] 中的“@”符号。此旧语法已从 1.2 版本开始弃用,不再有效。只需删除“@”符号即可升级。
  • 触发的事件现在会向上冒泡到 DOM。未经预期的事件处理程序可能会意外地捕获比预期更多的事件。
  • ready() 方法不再尝试对等待所有样式表加载进行任何保证。相反,所有 CSS 文件都应在页面上的脚本之前包含。
  • .isFunction 现在更简单,它不再处理一些奇怪的边缘情况(以简单性和性能为代价)。
  • “a, b, c” 类型选择器的顺序可能会发生变化。支持 querySelectorAll 的浏览器(Safari、Firefox 3.5+、Opera 10+、IE 8+)将按文档顺序返回元素,其他浏览器将(目前)按指定顺序返回元素。在 1.3.2 及更高版本中,所有用逗号分隔的选择器都将按文档顺序返回。
  • trigger 和 triggerHandler 方法不再接受数据数组中的事件对象。相反,它们应直接指定为参数。
  • 未记录的“extra”函数已从 trigger 和 triggerHandler 函数中删除。
  • 内部 jQuery.event.trigger 不再返回处理程序返回的最后一个项目,而是根据 W3C 规范返回 true 或 false。您应使用 jQuery.Event 对象来捕获特定的返回值。
  • 您应始终确保在标准模式下运行您的页面。已知存在某些方法在怪异模式下无法正常工作的问题。
  • 已删除一种旧的(已弃用)创建选择器插件的方式。以前,您可以创建字符串编码的插件,这些插件后来会转换为函数——此功能已删除——请直接创建函数。
  • jQuery.param(obj) 会执行 obj 的函数,而不是将它们转换为字符串。

以下属性已被弃用(以支持功能检测和 jQuery.support,如概述部分所述:jQuery.browser、jQuery.browser.version、jQuery.boxModel。

以下浏览器不再受支持:Safari 2

性能

为了衡量 jQuery 不同部分的性能,我们使用 SlickSpeed 测试套件的修改版本 来运行我们的测试(已修改为处理非选择器测试)。测试运行的原始结果如下所示(所有时间均以毫秒为单位)。

我们使用了 Yahoo 首页的副本(一个代表性的复杂网页),并使用了一些人们实际使用的选择器。针对人们目前使用的选择器将有助于提高现有和未来应用程序的性能。

Frameworks	jQuery 1.2.6	jQuery 1.3	Dojo 1.2.3	MooTools 1.2.1	Prototype 1.6.0.3
Firefox 3	184		111		147		240		137
Firefox 3.5	113		34		105		135		55
Safari 3.2	71		15		64		76		50
Safari Nightly	46		15		65		47		18
Opera 9.6	107		75		73		132		87
IE 6		854		640		561		1611		3174
IE 7		210		181		150		490		761
Chrome		30		13		23		118		10

委托过滤测试

为了测试委托过滤,我们尝试查看给定元素是否与选择器匹配。jQuery 1.3 和 Prototype 提供了用于处理此操作的本机方法(分别为 .is 和 .match),而 jQuery 1.2.6、Dojo 和 MooTools 都使用“运行选择器并查看元素是否在结果中”的技术。

Frameworks	jQuery 1.2.6	jQuery 1.3	Dojo 1.2.3	MooTools 1.2.1	Prototype 1.6.0.3
Firefox 3	3260		199		1630		3798		763
Firefox 3.5	1047		113		620		1101		298
Safari 3.2	1169		91		820		1223		188
Safari Nightly	911		65		294		590		125
Opera 9.6	1764		167		898		1976		451
IE 6		22142		1201		13000		17227		12827
IE 7		4908		341		2664		5497		2994
Chrome		959		125		700		939		153

DOM 操作测试

这些测试分析了插入 DOM 片段的性能(在 jQuery 和 Prototype 的情况下,这是 HTML,在 MooTools 的情况下,使用的是它们的 Element 类)。Dojo 没有提供任何显式帮助程序来注入 HTML 或构建 DOM 元素,因此它被排除在外。

Frameworks	jQuery 1.2.6	jQuery 1.3	MooTools 1.2.1	Prototype 1.6.0.3
Firefox 3	161		41		47		323
Firefox 3.5	113		31		42		78
Safari 3.2	77		10		25		41
Safari Nightly	87		22		22		31
Opera 9.6	130		23		36		84
IE 6		710		110		600		971
IE 7		560		60		330		460
Chrome		49		14		23		21

.offset() 测试

在多个元素上运行 jQuery .offset() 方法。

Frameworks	jQuery 1.2.6	jQuery 1.3
Firefox 3	142		30
Firefox 3.5	45		23
Safari 3.2	92		18
Safari Nightly	75		39
Opera 9.6	39		26
IE 6		151		70
IE 7		100		50
Chrome		115		21

.hide()/.show() 结果

在多个元素上运行 .hide() 和 .show() 方法。

Frameworks	jQuery 1.2.6	jQuery 1.3
Firefox 3	2680		722
Firefox 3.5	1867		448
Safari 3.2	1015		577
Safari Nightly	532		306
Opera 9.6	2327		1173
IE 6		8242		2715
IE 7		1912		961
Chrome		1922		551