jQuery .live()更加内存密集吗?

时间:2011-01-06 20:23:03

标签: memory-management jquery

jQuery .live()比简单的.click()。hover()或.keyup()更加内存密集吗?

我想它会是什么程度但是到了什么程度?

2 个答案:

答案 0 :(得分:7)

我猜它内存密集程度较低,但处理器占用更多,因为它只为每个事件/选择器分配一个处理函数,但它需要运行 test用于针对该选择器的匹配,以查找页面上发生的该类型的每个事件,以查看它是否匹配。

事实上,虽然我没有深入研究它是如何工作的,但我想它需要运行测试以针对{{1的每个元素的选择器进行匹配直到e.target(或直到找到匹配项)来查看沿途的任何内容是否与选择器匹配。如果我弄错了,其他人可以纠正我。

也就是说,当你执行document时,它也只使用一个处理函数。因此,如果有100个带有$('.someClass').click(function() {})的元素,它们将共享相同的函数,但jQuery确实需要在.someClass中为每个获取该处理程序的元素创建一个唯一条目,因此需要管理它们就好像它们是分开的一样。

jQuery.cache方法是两者之间的妥协。

它与.delegate()的行为相同,只是您将其分配给页面的本地部分,因此它只处理该部分中的点击。因此,它不需要考虑在页面上发生的每个事件。而只是发生在容器内的那些。


编辑:改进了选择器引擎正在执行的操作的措辞,并归功于@Šime Vidas

答案 1 :(得分:4)

这取决于你想要完成的事情。几乎我遇到的每个案例live()最终都被delegate()更好地解决了。 (它们相似,但有一个关键区别)live()委托给整个DOM树的根,并检查您指定的每个事件。使用delegate()可以指定监视事件的不同根,最终会更有效地执行。