长jQuery链是坏的吗?

时间:2010-12-15 18:56:03

标签: javascript jquery performance plugins

我一直在使用jQuery很长一段时间,我一直在为我的作品编写幻灯片插件,而我(不是100%有意识地)在一个链中写了75%。它是完全注释的,我指定每个end()以及它重置的内容等等,但是减慢 jQuery或DOM加载,或者,这实际上加快了它吗?

4 个答案:

答案 0 :(得分:7)

这一直取决于您的具体代码。至于存储引用vs .end(),那么......有一个非常长的链,它更快不链接 vs .end()调用,只是因为你必须处理额外的行李(存储/恢复),如.prevObject参考,.selector.context等您可能在许多情况下不关心的内容...... ..以及对先前对象的更多交织的引用。

更昂贵的地方更难以衡量......这不是执行(尽管速度较慢,即使是无限的)...这是更复杂的垃圾收集,以后清理所有这些对象,因为依赖图是现在要大得多。

现在......它会产生可衡量的差异吗?除非您的链条很长,在这种情况下它可能可能在大多数情况下您不必担心的微优化。

99%的时间,除非你做出一些令人震惊的性能惩罚性电话,不要担心,就像大多数微优化一样。如果您遇到性能问题,请进入。

答案 1 :(得分:6)

在现代浏览器中,您可以做的最昂贵的事情之一就是访问和操作DOM。链接允许您最小化您必须执行的实际查找,这可能意味着更快的代码。另一种选择是进行初始查找,将其存储在变量中,并从该变量中完成所有操作。话虽这么说,jquery是专门为这个链式api设计的,所以链接更加惯用。

答案 2 :(得分:4)

我认为jQuery的可链接性是一个很棒的功能......人们应该更频繁地使用它。 例如:

$(this)
  .find('.funky')
  .css('width', 30)
  .attr('title', 'Funky Title')
.end()
.fadeIn();

更好(更优雅) - 不必创建2个jQuery $(this)对象而不是:

$(this).find('.funky').css('width', 30).attr('title', 'Funky Title');
$(this).fadeIn();

答案 3 :(得分:2)

由于缺乏中介,我的猜测没有区别或更快。

唯一的主要缺点是清晰度,如果你通过评论认为很明显没有使用中间变量多线,通过评论或只是一个非常干净的调用链然后很好。