停止事件冒泡-提高性能?

gdo*_*ica 5 performance jquery event-bubbling event-propagation jquery-events

如果我不是false从事件回调或使用e.stopPropagationjQuery的功能返回,则该事件会使DOM冒泡。

在大多数情况下,我都不关心事件是否冒泡。类似于此DOM结构示例:

?<div id="theDiv">
    <form id="theForm" >
        <input type="submit" value="submit"/> 
    </form>
</div>???????????????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

通常,我没有这样的多个嵌套的提交回调:

$('#theDiv').submit(function() {
    alert('DIV!');
});
$('#theForm').submit(function(e) {
    alert('FORM!');
    e.preventDefault();
});?
Run Code Online (Sandbox Code Playgroud)

小提琴
DEMO显示submit事件冒泡到<div>
如果我停止传播或只是阻止默认设置,对我来说没有什么区别。

在这些情况下,如果停止传播我将获得性能收益吗?

Jos*_*eph 5

on()下面是和之间的比较live(),其中涉及冒泡以及 jQuery 被替换的原因live()。问题在于live()事件被附加到文档中,导致需要沿着树上很长的距离才能找到处理程序。您可以做的on()是将处理程序附加到最近的公共父级,从而避免在树上寻找处理程序的长途旅行 - 这意味着更快的性能。

但我建议您自己进行基准测试来检查。


Her*_*aaf 5

性能收益?是的,在jQuery live()和之间的性能测试中on()概述了一些细微的好处。正如@Joseph还指出的那样,两者之间的区别是live一直传播到树的整个路径,而on()只传播到最近的公共父节点。

在那些测试中,它on()可以表现live()出最多4倍的性能。实际上,那仍然不值得花些时间,但是我想,如果您具有非常深的html结构和大量事件触发器,则在停止传播方面的性能差异可能是值得的。