首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当使用大量选择器时,jQuery性能会有多严重的下降?

当使用大量选择器时,jQuery性能会有多严重的下降?
EN

Stack Overflow用户
提问于 2009-12-04 04:01:44
回答 3查看 203关注 0票数 0

当链接的href指向具有特定扩展名的文件时,我希望将click()事件应用于页面上的所有链接。适用的扩展列表徘徊在30个左右,未来可能会增加一点(但永远不会超过100个)。

我的第一个倾向是像这样构造事件绑定:

代码语言:javascript
运行
复制
$("a[href$=avi],
   a[href$=ppt],
   a[href$=rtf],

// ...snip a bunch more of these....

   a[href$=pdf],
   a[href$=xml]").click(function() {
      // Do something
 });

这是不是很疯狂?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-04 04:06:10

我会选择所有链接,然后在click函数中对其进行过滤,例如:

代码语言:javascript
运行
复制
$('a').click(function() {
    var ext = /[^.]+$/.exec($(this).attr('href'));
    switch(ext) {
        case 'avi':
        case 'ppt':
        ...
        case 'xml':
            // Do something
            break;
    }
});

节省了大量的遍历,而且更漂亮。

这种方法的缺点是,jQuery可能会独立地处理每个选择器,因此在完成对第一个选择器的搜索之后,它会完全忘记它还找到了什么,并再次在整个文档中搜索下一个选择器。使用这种方法,jQuery只需搜索所有链接一次,并且在函数中使用switch-case可能非常快,您不必为性能问题而烦恼。

票数 6
EN

Stack Overflow用户

发布于 2009-12-04 04:11:22

我会给你一个提示--几乎是肯定的。我做了这样的事情,非常痛苦。我尝试了另一种方法,将每个选择器的结果存储在一个数组中,然后执行$(数组).click()要快得多(特别是在IE6/P3900 mHz中)。

也就是说,您应该对进行基准测试,并为您的应用程序找到最快的方法。找一台安装了IE6的破旧电脑,或者买一台安装了IE6的VM,并在其中测试计时。选择器调优(看看哪些比较慢,以及如何避免调用它们)是我进行javascript优化的第一站。

票数 3
EN

Stack Overflow用户

发布于 2009-12-04 04:19:03

我会考虑使用一个过滤函数,而不是一组选择器:

代码语言:javascript
运行
复制
$('a').filter( function() {
           return $(this).attr('href').match( /(avi|ppt|...|xml)$/ ) != null;
       })
      .click( function() {
           // do something
       });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1842519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档