我一直在使用jQuery很长一段时间,我一直在为我的作品编写幻灯片插件,而我(不是100%有意识地)在一个链中写了75%。它是完全注释的,我指定每个end()
以及它重置的内容等等,但是减慢 jQuery或DOM加载,或者,这实际上加快了它吗?
答案 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)
由于缺乏中介,我的猜测没有区别或更快。
唯一的主要缺点是清晰度,如果你通过评论认为很明显没有使用中间变量多线,通过评论或只是一个非常干净的调用链然后很好。