每当我读到jquery中的事件注册时,他们都会说我们应该尝试将事件处理程序添加到最近的父级,并避免向文档添加事件侦听器,因为根据资源它们很慢且效率不高。
但为什么他们很慢?显然,这是因为事件必须冒泡到文档,这需要时间。然后将它与要调用的选择器列表进行比较,例如
$(document).on("click", ".abc", function(){ })
$(document).on("click", ".abc2", function(){ })
所以这里如果我单击一个元素,click事件将冒泡到文档然后它将匹配选择器列表(“。abc,.abc2”)......这是低效的。好的我明白了,但如果我在列表中只有一个选择器呢? e.g。
$(document).on("click", "*", function(){ })
它会慢吗?如果是这样的话?
基本上我正在尝试创建一个google的jsaction similer lib,所以我会这样写: -
$(document).on("click", "[jsaction]", function(){ })
因为这将是唯一的选择器,所以我认为它不会很慢?还是会呢?
如果将事件附加到文档效率不高,那么完全ajax应用程序呢?我的应用程序完全是ajax,每个页面都将由ajax下载。还有其他更有效的解决方案吗?
答案 0 :(得分:1)
事件委托基本上使用2个不同的过程,
因此,您通过声明通用选择器来倡导匹配。坦率地说,匹配2或3个元素将比在事件冒泡期间遍历文档花费更少的时间。在这种情况下,如果您使用静态最接近的父级而不是document
,则遍历时间将减少,这将提高性能。
虽然匹配花费的时间较少,但是当它有15个以上的匹配元素时,即使使用最近的父代替document
,也会影响性能。
总而言之,我们必须通过了解上述两个不同的过程,在常识下谨慎地使用事件委派。