我在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++)
感谢名单
答案 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()
慢一点,但会非常微小。