jQuery 1.2.6:事件速度提升 100%

发布日期 作者

jQuery 1.2.6 主要是一个针对 jQuery 1.2 的错误修复版本。您可以在 错误跟踪器 上查看完整的修复列表。

这是紧随 jQuery 1.2.3 之后的下一个版本。1.2.4 和 1.2.5 版本被跳过(1.2.4 版本构建错误,实际上与 1.2.3 版本相同,而 1.2.5 版本缺少补丁)。

整个 jQuery 团队在发布此版本方面做出了巨大努力。借此机会感谢他们所有人的持续努力工作。

我还想借此机会欢迎 Ariel Flesler 加入 jQuery 核心开发团队。他在发布此版本方面提供了宝贵的帮助,包括贡献错误修复、性能改进、功能和测试用例。您可以在整个版本中看到他辛勤工作的成果。欢迎 Ariel,感谢他所有的贡献!

下载

jQuery 1.2.6

如果您希望从 Subversion 仓库 中签出完整的版本,您可以 按照说明 从以下位置签出源代码

svn co http://jqueryjs.googlecode.com/svn/tags/1.2.6

性能改进

jQuery 团队再次努力在本版本中带来巨大的性能改进。与之前的版本一样,我们扩展了对 jQuery 框架许多方面的研究,寻找常见的痛点并提供解决方案。

以下性能改进的所有数据和测试用例都可以在以下 jQuery 1.2.3 v. 1.2.6 Google 电子表格 中找到(为了与 Internet Explorer 7 的结果基本一致,Internet Explorer 6 的结果被排除在外)。

事件处理速度提升 103%

在分析密集型应用程序代码(特别是拖放等操作)时,我们寻找可以进行普遍更改的方法,这些更改会影响所有用户。一个经常调用的代码部分是 jQuery 事件处理程序,对它进行任何优化都将极大地提高所有由此产生的频繁调用事件的性能。通过专注于此处的改进,您拥有的所有频繁调用事件都应该看到立竿见影的益处。

CSS 选择器速度提升 13%

对 jQuery 内部方法进行了一些优化,极大地提高了它们的性能,同时为 jQuery 中一些最常用的代码(例如 CSS 选择器代码)带来了可衡量的益处。

例如,jQuery.map() 方法现在快了 866%jQuery.extend() 方法快了 19%。这两个更改为整个库带来了巨大的性能改进。

.offset() 速度提升 21%

加上对 jQuery 事件处理代码的改进,对 .offset() 的优化使密集型鼠标操作变得更快。例如,由于这些更改,jQuery UI 的拖放代码现在快了 300% 以上(允许您实现更快、更流畅的拖放操作)。

.css() 速度提升 25%

一个经常调用的方法(在内部和外部)。对该方法的优化在其他方法(例如 .offset())中很容易感受到。

新功能和重大更改

尺寸插件现在是核心的一部分

Brandon Aaron 开发的尺寸插件的剩余方法已引入 jQuery 核心,并附带额外的错误修复和性能改进。该插件在开发人员和插件作者中得到了广泛使用,已成为 jQuery 生态系统中不可或缺的一部分。在过去几个版本中,我们一直在缓慢地引入尺寸插件中最常用的方法,但随着 1.2.6 版本的发布,所有剩余方法现在都是核心的一部分。

如果您要将您的 jQuery 版本升级到 1.2.6 版,您现在可以选择从代码中排除尺寸插件。

尺寸的完整文档可以在 jQuery 文档网站 上找到(并且正在与 jQuery 核心文档集成)。

.attr() 大修

.attr() 方法已彻底大修(解决了约 15 个未解决的错误)。此外,该方法已大幅简化和优化。

.toggle() 现在可以接受更多函数

从历史上看,jQuery 的 .toggle() 函数接受两个函数(以偶数/奇数方式切换)。但是,这已更改,以便可以提供任意数量的函数并通过鼠标点击切换。

$("div").toggle(function(){
  $(this).removeClass("three").addClass("one");
}, function(){
  $(this).removeClass("one").addClass("two");
}, function(){
  $(this).removeClass("two").addClass("three");
});

您现在可以取消绑定绑定的 .toggle() 和 .one() 函数

function test(){ $(this).addClass("test"); }
$("div").one("click", test);
$("div").unbind("click", test);

$("div").toggle(test, test);
$("div").unbind("click", test);

.index() 支持 jQuery 集合

jQuery 的 .index() 函数允许您在 jQuery 集合中找到 DOM 元素的位置,现在您也可以指定一个 jQuery 集合(其中第一个元素将被提取并在原始集合中定位)。

var test = $("div.test");
$("div").index( test ) == 3

jQuery.makeArray 可以将任何内容转换为数组。

jQuery 的内部 .makeArray() 方法现在将任何类似数组的对象转换为一个新数组。此外,它将所有其他对象包装为一个数组并返回结果集。

jQuery.makeArray( document.getElementsByTagName("div") )
// => [ div, div, div ]

jQuery.makeArray( true )
// => [ true ]

jQuery.makeArray()
// => []

beforeSend 可以取消 Ajax 调用

beforeSend Ajax 回调允许开发人员在请求发生之前执行一段代码,现在该代码还可以验证一些参数的完整性并取消生成的 Ajax 请求(对于表单验证等任务很有用)。

$.ajax({
  beforeSend: function(){
    return $("#input").val() == "";
  },
  url: "test.php"
});

公开速度

jQuery 有许多命名动画速度(例如“慢速”、“快速”和“默认”),您现在可以通过操作 jQuery.fx.speeds 对象来为动画速度提供您自己的名称,或者修改现有名称。

jQuery.fx.speeds.slow = 1000;
$("#test").slideDown("slow");

关于“jQuery 1.2.6:事件速度提升 100%”的 42 条评论

  1. Aceman 说道:

    我印象深刻。保持良好的工作。jQuery 是最好的 Javascript 库,轻巧快速。我非常喜欢它。

  2. Duane Johnson 说道:

    干得好,谢谢!jQuery 使我的(编码)生活变得更加美好。哦,对于那些还没看到它的人,也看看 livequery 插件。

  3. Joshua Davey 说道:

    哇!我认为性能更新可能是我最喜欢的更新,因为我不需要做任何事情,突然我的网站速度快了一倍。干得好!

  4. Takuan Daikon 说道:

    哇!因为我正在使用一个生产应用程序,它有很多“自定义”调整和内部修复,用于我的许多 javascript 库(其中大多数在内部或作为选项使用 jQuery,例如 Ext-JS),我非常担心升级,但它几乎是一个直接替换。

    我确实不得不使用兼容性插件(我以前使用的是 1.1 版)并对 dequeue 函数进行了一些调整以适应 interface.js,但其他一切都非常容易,我可以享受整个应用程序的错误修复和性能提升。

    感谢大家的辛勤工作,我们非常感谢!

  5. Roshan Bhattarai 说道:

    哇……你们做得真棒……我一直很喜欢 jQuery 并且喜欢使用这个框架……我迫不及待地想使用更快的 jQuery……非常感谢!

  6. Corey Dutson 说:

    我喜欢它比以前快了866%。即使以前它可能有多糟糕,对任何东西的866%的提升都是令人印象深刻的。

    继续努力!

  7. Przemek Sobstel 说:

    使用Google来提供jQuery (https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.2.6/jquery.min.js) 确实是一个不错的选择,特别是如果你无法在服务器上设置压缩(缺少mod_defalte等)。另外,如果更多开发者使用它,你就能从缓存中获得更大的优势(有机会直接从缓存中加载jQuery,即使有人第一次访问你的网站)。YUI已经利用了它。

  8. devolute 说:

    我一起工作的开发者非常喜欢这个。有了这样的新闻,我很高兴我也向我的朋友们推荐它。

  9. 我很好奇,是什么改变让事件处理速度提高了一倍?或者说是什么拖慢了它?
    和往常一样,干得好,伙计们。jQuery一直是我最喜欢的JS框架,它一直在变得更好。

  10. @Eran: 我们花了很长时间用低效的方式修复跨浏览器事件问题。也就是说,对于每一个事件,我们都在jQuery.extend-ing原始事件对象到一个新的对象中。提高extend的性能是有帮助的,但优化代码以挑选我们想要修复的精确内容也有帮助。

  11. Evan 说:

    太棒了。我很高兴你们将尺寸结合在一起,它太基础了,不能被遗漏。谢谢!

  12. sheshnjak 说:

    很高兴知道你们在框架中添加了新东西,但我希望这不是代码膨胀的开始。自从我开始使用jQuery的第一天起,很明显这是一段美好的友谊的开始。当我开始使用jQuery时,我的视力提高了,心跳加快了,我的食欲也好了很多。谢谢你们,jQuery做得很好!

  13. Mohammed 说:

    非常感谢你们。JQuery独自一人让我重新爱上了编程。你们所有人,尤其是Resig先生,都是天才。我向你们致敬!

    Hip Hip! Hoorah!

  14. steve 说:

    谢谢你们。明天上班的第一件事就是升级库!即使我们现在几乎不使用它……

    坦率地说,jquery是我现在唯一对我的网页开发工作保持兴趣的东西。几乎所有其他方面,我都感到非常失望,而且不太关心继续敲打那些我早已知道的东西,或者学习那些我不了解的东西。但jquery就是……“闻起来”太酷了。我期待着在未来几个月重建我们主站时,更多地挑战自己并更深入地学习它。

  15. Chris 说:

    @Vader

    你认识Darth Vader吗?

    自从高中后我就没见过他了。告诉他我说了“你好”!谢谢!

  16. michele 说:

    太棒了,感谢你们所做的一切!

    还有,感谢你们修复了attr(),它在IE下给我带来了一些麻烦(与表单标签耦合),我总是忘记提交工单,但你们已经修复了,所以再次感谢! ;-)

  17. Chris Missal 说:

    我对使用 jQuery 还比较陌生,但我真的很兴奋能够用它来做一些很棒的事情。 jQuery 团队棒棒哒!!

  18. pRtkL xLr8r 说:

    我刚开始使用 jQuery 几个月,我简直不敢相信它有多棒。它不仅让我的 JavaScript 生活变得容易了 100 倍,而且还取代了我对 xajax 的使用——并不是说 xajax 不好,只是它在 AJAX(尤其是 JSON)方面没有 jQuery 那么强大和灵活。

    如果有一种年度最佳软件技术奖,你肯定会得到我的投票……

  19. 好吧,我不能错过这个!:) 非常感谢这次发布。我已经注意到基于 jQuery 的应用程序的性能提升。

    jQuery 就是最好的!

    感谢 jQuery 团队!我太喜欢它了!

    有没有考虑过推出一些 jQuery T 恤、钥匙链、钢笔、杯子等?我愿意买一些来帮助推广这个库。

  20. 如果没有 jQuery,我们至少要花两倍的时间开发我们的网站,更不用说性能提升了。
    感谢你们提供如此出色的库。你们真是太棒了。

  21. Mike Gale 说:

    我对你们衡量改进的方法很感兴趣。

    在我看来,计时上 103% 的改进意味着某些东西在你要求它开始之前就已经完成了。

    我假设你们的计算方法是将“之后”时间除以“之前”时间,然后减去 100%。