jQuery .live()比简单的.click()。hover()或.keyup()更加内存密集吗?
我想它会是什么程度但是到了什么程度?
答案 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()
可以指定监视事件的不同根,最终会更有效地执行。