对于 JavaScript 事件,冒泡比捕获好吗?

For JavaScript event, is bubble better than capture?

在jQuery中,事件处理程序的默认时间是冒泡时间。有什么优势吗?

捕获不是比泡泡快吗?

is bubble better than capture?

没有。它也没有更糟。只是不一样。

Isn't capture faster than bubble?

取决于您对 "faster" 的定义。在捕获阶段添加的事件侦听器将在冒泡阶段的事件侦听器 之前 触发,但所有事件侦听器都将在浏览器重绘之前完成,因此使用其中一个并没有真正的性能优势。

虽然有一些值得注意的差异:

并非所有事件都会冒泡。 focusload 等事件不会冒泡。这意味着如果您将非捕获事件侦听器附加到元素上的非冒泡事件,则可以确保只有该元素触发了事件,而不是它们的子元素之一。相反,您可以使用捕获阶段附加单个事件侦听器,并动态获取触发它的元素,并减少侦听器的数量并响应未来的元素。

捕获阶段可以在事件到达子元素之前停止传播事件。在事件冒泡到父元素之前取消事件可能更为常见。但是,在事件到达子级之前取消它可能很有用,在这种情况下捕获阶段确实有优势(或劣势)。

结论:

为所需功能选择正确的捕获模式。在大多数情况下,两者都没有真正的性能优势,即使有也只是微优化。