jQuery 1.4.2 现已发布!这是在 jQuery 1.4 之上的第二个次要版本,修复了 1.4 版本中的一些未解决的错误,并实现了一些不错的改进。
我要感谢以下为此次发布提供补丁的人:Ben Alman、Justin Meyer、Neeraj Singh 和 Noah Sloan。
下载
与往常一样,我们提供两个版本的 jQuery,一个最小化(我们现在使用Google Closure Compiler 作为默认的最小化程序)和一个未压缩(用于调试或阅读)。
您可以随意将以上 URL 直接包含到您的网站中,您将获得快速加载的 jQuery 带来的全部性能优势。
此外,您还可以直接从 Google 或 Microsoft 的 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 的性能提高了约 2 倍,相比 jQuery 1.4.1 提高了约 3 倍,相比 jQuery 1.3.2 提高了约 3 倍。
具体来说,我们改进了 jQuery 中 4 个方面的性能
虽然像 Taskspeed 这样的综合基准测试在分解为单独的子测试以供进一步研究时可能很有趣,但作为项目,我们倾向于避免将它们用作真实整体库性能的准确度量。考虑到构成库的许多方面,更不用说它们提供的不同技术了,累积结果很少能反映实际用户使用库的方式。
例如,我们仅通过优化 $("body")
选择器就在 Taskspeed 中看到了显著的整体性能提升,因为它在测试中被调用了数百次。此外,我们通过优化 .bind()
和 .unbind()
提高了性能,尽管仅提高了几毫秒,但这也是微不足道的,尤其是在您可能希望使用 .live()
或 .delegate()
而不是绑定数百个事件的情况下。
我们还收集了一些来自其他主要库的结果,但我们对这些结果不太感兴趣,对我们来说,更重要的是我们对 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