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

iam*_*eed 2 jquery memory-management

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

我想它会是在多大程度上?

use*_*716 7

我猜,这是更少的内存密集型的,但更多的处理器密集型的,因为它只是分配一个每个事件/选择处理函数,但它需要运行针对该选择匹配该类型的网页上发生的每一个事件测试看它是否匹配.

事实上,虽然我还没有深挖它是如何工作的,我会想象它需要运行在针对选择的匹配测试每个元素e.target,一直到document(或直到它找到一个匹配)到看看路上是否有任何东西与选择器相匹配.如果我错了,别人可以纠正我.

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

这种.delegate()方法在两者之间是一个很好的折衷方案.

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


编辑:改进了选择引擎正在做的措辞,同时归功于@ŠimeVidas.