代码之家  ›  专栏  ›  技术社区  ›  Mircea

jQuery/Javascript“for”函数性能改进

  •  1
  • Mircea  · 技术社区  · 16 年前

    我在jQuery可拖动函数中执行了一个“for”函数。从执行时间的角度来看,有没有更好的方法?我的职能是:

     $("#dragger").draggable({
    
                containment: '#timeline',
                axis: 'x',
                drag: function(event, ui) {
    
                var divs = $("#timeline div.timeline");
                for (var i=0, il=divs.length; i<il; i++) {
                    var layer = '#layer'+i,
                    gow = layer+"Go";
                    SelectClosestKeyframes(this, event, ui, $(layer), $(gow));
                }
             }      
        });
    

    我能改进一下吗 for (var i=0, il=divs.length; i<il; i++)

    4 回复  |  直到 16 年前
        1
  •  5
  •   Pointy    16 年前

    考虑到你在循环中所做的,尝试优化循环机制是没有意义的。首先,我怀疑您是否能够获得更好的结果,其次,因为循环代码的成本与所有jQuery调用的成本相比相形见绌。

    <div> 元素。然后遍历该列表,但代码根本不使用“divs”数组。相反,它在每次迭代中再执行2次jQuery查找(尽管是相当便宜的,因为它们基于元素id),再加上该函数中的任何工作。

    你是如何得出循环需要“优化”的结论的?页面慢吗?如果是这样的话,我会看看“SetClosestKeyframes”函数的内部,看看是什么 那个 做。除非有几百万个“div.timeline”元素,否则问题不在于循环本身。

        2
  •  2
  •   Yellowfog    16 年前

    http://www.websiteoptimization.com/speed/10/ 是我以前用来优化javascript循环的一个很好的资源。

        3
  •  0
  •   NimChimpsky    16 年前

        4
  •  0
  •   gnarf    16 年前

    不是更快,只是更干净:

    var dragable = this;
    $("#timeline div.timeline").each(function(i) {
       SelectClosestKeyframes(dragable, event, ui, $('#layer'+i), $('#layer'+i+'Go'));
    });
    

    each() 会比你的速度慢一点 for() 但在很小的范围内。