jQuery / Javascript“for”功能性能改进

时间:2010-07-21 11:59:41

标签: javascript jquery performance

我在jQuery draggable函数中执行了“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 个答案:

答案 0 :(得分:5)

考虑到你在循环中所做的事情,尝试优化循环机制是没有意义的。首先,我怀疑你无论如何都可以获得更好的效果,其次是因为循环代码的成本因所有jQuery调用的费用而相形见绌。

首先找到一堆<div>元素。然后迭代该列表,但您的代码根本不使用“divs”数组。相反,它会在每次迭代时再执行2次jQuery查找(虽然它们基于元素ID,但相当便宜),以及该函数中的任何工作。

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我希望重构SelectClosestKeyframes函数,以便它与时间轴类绑定到div。和/或使用“每个”。

答案 3 :(得分:0)

不是说这会更快,更清洁:

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

事实上,each()会比for()慢一点,但会非常微小。