在jQuery中,事件处理程序的默认时间是冒泡时间。这样做有什么优势吗?捕获比冒泡快吗?
气泡是否比捕获更好?
不是。它也不会更差。只是不同。
捕获比气泡更快吗?
这取决于你对“更快”的定义。在捕获阶段添加的事件监听器将在气泡阶段之前触发,但所有监听器都将在浏览器重新绘制之前完成,因此使用其中任何一种并没有真正的性能优势。
但请注意以下几点不同:
并非所有事件都会冒泡。像 focus
和 load
这样的事件不会冒泡。这意味着,如果您将非捕获事件侦听器附加到元素的非冒泡事件上,则可以确保仅该元素触发了该事件,而不是其子元素之一。相反,您可以使用捕获阶段附加单个事件侦听器,并动态获取哪个元素触发了它,并减少监听器数量并响应未来元素。
捕获阶段可以在事件到达子元素之前停止其传播。通常会在事件冒泡到父元素之前取消事件,但是在事件到达子元素之前取消事件可能也很有用,在这种情况下,捕获阶段确实具有优势(或劣势)。
选择适当的捕获模式以实现所需的功能。在大多数情况下,两者都没有真正的性能优势,即使有,也只是微观优化。